public void AddDocument(PdfReader reader, List<int> pagesToKeep) { if (indirectMap.ContainsKey(reader)) { throw new ArgumentException(MessageLocalization.GetComposedMessage("document.1.has.already.been.added", reader.ToString())); } reader.SelectPages(pagesToKeep); AddDocument(reader); }
public void AddDocument(PdfReader reader) { if (indirectMap.ContainsKey(reader)) { throw new ArgumentException(MessageLocalization.GetComposedMessage("document.1.has.already.been.added", reader.ToString())); } if (!reader.IsOpenedWithFullPermissions) throw new BadPasswordException(MessageLocalization.GetComposedMessage("pdfreader.not.opened.with.owner.password")); if (mergeFields) { reader.ConsolidateNamedDestinations(); reader.ShuffleSubsetNames(); for (int i = 1; i <= reader.NumberOfPages; i++) { PdfDictionary page = reader.GetPageNRelease(i); if (page != null && page.Contains(PdfName.ANNOTS)) { PdfArray annots = page.GetAsArray(PdfName.ANNOTS); if (annots != null) { for (int j = 0; j < annots.Size; j++) { PdfDictionary annot = annots.GetAsDict(j); if (annot != null) annot.Put(annotId, new PdfNumber(++annotIdCnt)); } } } } fields.Add(reader.AcroFields); UpdateCalculationOrder(reader); } bool tagged = PdfStructTreeController.CheckTagged(reader); mergeFieldsInternalCall = true; for (int i = 1; i <= reader.NumberOfPages; i++) { AddPage(GetImportedPage(reader, i, tagged && this.tagged)); } mergeFieldsInternalCall = false; }
virtual public void AddDocument(PdfReader reader) { if (!document.IsOpen()) { throw new DocumentException(MessageLocalization.GetComposedMessage("the.document.is.not.open.yet.you.can.only.add.meta.information")); } if (indirectMap.ContainsKey(reader)) { throw new ArgumentException(MessageLocalization.GetComposedMessage("document.1.has.already.been.added", reader.ToString())); } if (!reader.IsOpenedWithFullPermissions) throw new BadPasswordException(MessageLocalization.GetComposedMessage("pdfreader.not.opened.with.owner.password")); if (mergeFields) { reader.ConsolidateNamedDestinations(); reader.ShuffleSubsetNames(); for (int i = 1; i <= reader.NumberOfPages; i++) { PdfDictionary page = reader.GetPageNRelease(i); if (page != null && page.Contains(PdfName.ANNOTS)) { PdfArray annots = page.GetAsArray(PdfName.ANNOTS); if (annots != null) { for (int j = 0; j < annots.Size; j++) { PdfDictionary annot = annots.GetAsDict(j); if (annot != null) annot.Put(annotId, new PdfNumber(++annotIdCnt)); } } } } AcroFields acro = reader.AcroFields; // when a document with NeedAppearances is encountered, the flag is set // in the resulting document. bool needapp = !acro.GenerateAppearances; if (needapp) needAppearances = true; fields.Add(reader.AcroFields); UpdateCalculationOrder(reader); } bool tagged = this.tagged && PdfStructTreeController.CheckTagged(reader); mergeFieldsInternalCall = true; for (int i = 1; i <= reader.NumberOfPages; i++) { AddPage(GetImportedPage(reader, i, tagged)); } mergeFieldsInternalCall = false; }
/** * Copy document fields to a destination document. * @param reader a document where fields are copied from. * @throws DocumentException * @throws IOException */ public virtual void CopyDocumentFields(PdfReader reader) { if (!document.IsOpen()) { throw new DocumentException( MessageLocalization.GetComposedMessage("the.document.is.not.open.yet.you.can.only.add.meta.information")); } if (indirectMap.ContainsKey(reader)) { throw new ArgumentException(MessageLocalization.GetComposedMessage("document.1.has.already.been.added", reader.ToString())); } if (!reader.IsOpenedWithFullPermissions) throw new BadPasswordException(MessageLocalization.GetComposedMessage("pdfreader.not.opened.with.owner.password")); if (!mergeFields) throw new ArgumentException( MessageLocalization.GetComposedMessage( "1.method.can.be.only.used.in.mergeFields.mode.please.use.addDocument", "copyDocumentFields")); indirects = new Dictionary<RefKey, IndirectReferences>(); indirectMap[reader] = indirects; reader.ConsolidateNamedDestinations(); reader.ShuffleSubsetNames(); if (tagged && PdfStructTreeController.CheckTagged(reader)) { structTreeRootReference = (PRIndirectReference) reader.Catalog.Get(PdfName.STRUCTTREEROOT); if (structTreeController != null) { if (reader != structTreeController.reader) structTreeController.SetReader(reader); } else { structTreeController = new PdfStructTreeController(reader, this); } } IList<PdfObject> annotationsToBeCopied = new List<PdfObject>(); for (int i = 1; i <= reader.NumberOfPages; i++) { PdfDictionary page = reader.GetPageNRelease(i); if (page != null && page.Contains(PdfName.ANNOTS)) { PdfArray annots = page.GetAsArray(PdfName.ANNOTS); if (annots != null && annots.Size > 0) { if (importedPages.Count < i) throw new DocumentException( MessageLocalization.GetComposedMessage("there.are.not.enough.imported.pages.for.copied.fields")); indirectMap[reader][new RefKey(reader.pageRefs.GetPageOrigRef(i))] = new IndirectReferences(pageReferences[i - 1]); for (int j = 0; j < annots.Size; j++) { PdfDictionary annot = annots.GetAsDict(j); if (annot != null) { annot.Put(annotId, new PdfNumber(++annotIdCnt)); annotationsToBeCopied.Add(annots[j]); } } } } } foreach (PdfObject annot in annotationsToBeCopied) { CopyObject(annot); } if (tagged && structTreeController != null) structTreeController.AttachStructTreeRootKids(null); AcroFields acro = reader.AcroFields; bool needapp = !acro.GenerateAppearances; if (needapp) needAppearances = true; fields.Add(acro); UpdateCalculationOrder(reader); structTreeRootReference = null; }