void addDocument(PdfReader reader) throws DocumentException, IOException { if (!reader.isOpenedWithFullPermissions()) throw new BadPasswordException( MessageLocalization.getComposedMessage("pdfreader.not.opened.with.owner.password")); openDoc(); if (readers2intrefs.containsKey(reader)) { reader = new PdfReader(reader); } else { if (reader.isTampered()) throw new DocumentException( MessageLocalization.getComposedMessage("the.document.was.reused")); reader.consolidateNamedDestinations(); reader.setTampered(true); } reader.shuffleSubsetNames(); readers2intrefs.put(reader, new IntHashtable()); readers.add(reader); int len = reader.getNumberOfPages(); IntHashtable refs = new IntHashtable(); for (int p = 1; p <= len; ++p) { refs.put(reader.getPageOrigRef(p).getNumber(), 1); reader.releasePage(p); } pages2intrefs.put(reader, refs); visited.put(reader, new IntHashtable()); AcroFields acro = reader.getAcroFields(); // when a document with NeedAppearances is encountered, the flag is set // in the resulting document. boolean needapp = !acro.isGenerateAppearances(); if (needapp) needAppearances = true; fields.add(acro); updateCalculationOrder(reader); }
void addDocument(PdfReader reader, List<Integer> pagesToKeep) throws DocumentException, IOException { if (!readers2intrefs.containsKey(reader) && reader.isTampered()) throw new DocumentException( MessageLocalization.getComposedMessage("the.document.was.reused")); reader = new PdfReader(reader); reader.selectPages(pagesToKeep); if (reader.getNumberOfPages() == 0) return; reader.setTampered(false); addDocument(reader); }