Exemple #1
0
        protected internal void SetReader(PdfReader reader)
        {
            this.reader = reader;
            fileName    = reader.SafeFile.filename;
            if (!openedDocuments.ContainsKey(fileName))
            {
                openedDocuments.Add(fileName, false);
            }
            PdfObject obj = reader.Catalog.Get(PdfName.STRUCTTREEROOT);

            obj = GetDirectObject(obj);
            if ((obj == null) || (!obj.IsDictionary()))
            {
                throw new BadPdfFormatException(MessageLocalization.GetComposedMessage("no.structtreeroot.found"));
            }
            structTreeRoot = (PdfDictionary)obj;
            obj            = PdfStructTreeController.GetDirectObject(structTreeRoot.Get(PdfName.PARENTTREE));
            if (!obj.IsDictionary())
            {
                throw new BadPdfFormatException(MessageLocalization.GetComposedMessage("the.document.does.not.contain.parenttree"));
            }
            parentTree     = (PdfDictionary)obj;
            sourceRoleMap  = null;
            sourceClassMap = null;
        }
Exemple #2
0
        static public bool CheckTagged(PdfReader reader)
        {
            PdfObject obj = reader.Catalog.Get(PdfName.STRUCTTREEROOT);

            obj = GetDirectObject(obj);
            if (obj == null || !obj.IsDictionary())
            {
                return(false);
            }
            PdfDictionary structTreeRoot = (PdfDictionary)obj;

            obj = PdfStructTreeController.GetDirectObject(structTreeRoot.Get(PdfName.PARENTTREE));
            if (obj == null || !obj.IsDictionary())
            {
                return(false);
            }
            return(true);
        }
 public PdfImportedPage GetImportedPage(PdfReader reader, int pageNumber, bool keepTaggedPdfStructure)
 {
     if (!keepTaggedPdfStructure)
     {
         return(GetImportedPage(reader, pageNumber));
     }
     else
     {
         if (structTreeController != null)
         {
             if (reader != structTreeController.reader)
             {
                 structTreeController.SetReader(reader);
             }
         }
         else
         {
             structTreeController = new PdfStructTreeController(reader, this);
         }
         disableIndirects.Clear();
         parentObjects.Clear();
         return(GetImportedPageImpl(reader, pageNumber));
     }
 }
Exemple #4
0
 public PdfImportedPage GetImportedPage(PdfReader reader, int pageNumber, bool keepTaggedPdfStructure) {
     if (mergeFields && !mergeFieldsInternalCall) {
         throw new ArgumentException(MessageLocalization.GetComposedMessage("1.method.cannot.be.used.in.mergeFields.mode.please.use.addDocument", "getImportedPage"));
     }
     ImportedPage newPage = null;
     updateRootKids = false;
     if (!keepTaggedPdfStructure) {
         if (mergeFields) {
             newPage = new ImportedPage(reader, pageNumber, mergeFields);
             importedPages.Add(newPage);
         }
         return GetImportedPage(reader, pageNumber);
     }
     if (structTreeController != null) {
         if (reader != structTreeController.reader)
             structTreeController.SetReader(reader);
     } else {
         structTreeController = new PdfStructTreeController(reader, this);
     }
     newPage = new ImportedPage(reader, pageNumber, mergeFields);
     switch (CheckStructureTreeRootKids(newPage)) {
         case -1: //-1 - clear , update
             ClearIndirects(reader);
             updateRootKids = true;
             break;
         case 0: //0 - not clear, not update
             updateRootKids = false;
             break;
         case 1: //1 - not clear, update
             updateRootKids = true;
             break;
     }
     importedPages.Add(newPage);
     disableIndirects.Clear();
     parentObjects.Clear();
     return GetImportedPageImpl(reader, pageNumber);
 }
Exemple #5
0
        public PdfImportedPage GetImportedPage(PdfReader reader, int pageNumber, bool keepTaggedPdfStructure) {
            updateRootKids = false;
            if (!keepTaggedPdfStructure)
                return GetImportedPage(reader, pageNumber);
            else {
                if (structTreeController != null) {
                    if (reader != structTreeController.reader)
                        structTreeController.SetReader(reader);
                } else {
                    structTreeController = new PdfStructTreeController(reader, this);
                }

                ImportedPage newPage = new ImportedPage(reader, pageNumber);
                switch (CheckStructureTreeRootKids(newPage)) {
                    case -1: //-1 - clear , update
                        ClearIndirects(reader);
                        updateRootKids = true;
                        break;
                    case 0: //0 - not clear, not update
                        updateRootKids = false;
                        break;
                    case 1: //1 - not clear, update
                        updateRootKids = true;
                        break;
                }
                importedPages.Add(newPage);
                disableIndirects.Clear();
                parentObjects.Clear();
                return GetImportedPageImpl(reader, pageNumber);
            }
        }
 public PdfImportedPage GetImportedPage(PdfReader reader, int pageNumber, bool keepTaggedPdfStructure)
 {
     if (!keepTaggedPdfStructure)
         return GetImportedPage(reader, pageNumber);
     else {
         if (structTreeController != null) {
             if (reader != structTreeController.reader)
                 structTreeController.SetReader(reader);
         } else {
             structTreeController = new PdfStructTreeController(reader, this);
         }
         disableIndirects.Clear();
         parentObjects.Clear();
         return GetImportedPageImpl(reader, pageNumber);
     }
 }
Exemple #7
0
        /**
         * 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;
        }