IsStream() public méthode

public IsStream ( ) : bool
Résultat bool
Exemple #1
0
        /**
         * Translate a PRIndirectReference to a PdfIndirectReference
         * In addition, translates the object numbers, and copies the
         * referenced object to the output file if it wasn't available
         * in the cache yet. If it's in the cache, the reference to
         * the already used stream is returned.
         *
         * NB: PRIndirectReferences (and PRIndirectObjects) really need to know what
         * file they came from, because each file has its own namespace. The translation
         * we do from their namespace to ours is *at best* heuristic, and guaranteed to
         * fail under some circumstances.
         */
        protected override PdfIndirectReference CopyIndirect(PRIndirectReference inp)
        {
            PdfObject srcObj      = PdfReader.GetPdfObjectRelease(inp);
            ByteStore streamKey   = null;
            bool      validStream = false;

            if (srcObj.IsStream())
            {
                streamKey   = new ByteStore((PRStream)srcObj);
                validStream = true;
                PdfIndirectReference streamRef = (PdfIndirectReference)streamMap[streamKey];
                if (streamRef != null)
                {
                    return(streamRef);
                }
            }

            PdfIndirectReference theRef;
            RefKey             key  = new RefKey(inp);
            IndirectReferences iRef = (IndirectReferences)indirects[key];

            if (iRef != null)
            {
                theRef = iRef.Ref;
                if (iRef.Copied)
                {
                    return(theRef);
                }
            }
            else
            {
                theRef         = body.PdfIndirectReference;
                iRef           = new IndirectReferences(theRef);
                indirects[key] = iRef;
            }
            if (srcObj != null && srcObj.IsDictionary())
            {
                PdfObject type = PdfReader.GetPdfObjectRelease(((PdfDictionary)srcObj).Get(PdfName.TYPE));
                if (type != null && PdfName.PAGE.Equals(type))
                {
                    return(theRef);
                }
            }
            iRef.SetCopied();

            if (validStream)
            {
                streamMap[streamKey] = theRef;
            }

            PdfObject obj = CopyObject(srcObj);

            AddToBody(obj, theRef);
            return(theRef);
        }
Exemple #2
0
            private void SerObject(PdfObject obj, int level, ByteBuffer bb, HashSet2 <PdfObject> serialized)
            {
                if (level <= 0)
                {
                    return;
                }
                if (obj == null)
                {
                    bb.Append("$Lnull");
                    return;
                }

                if (obj.IsIndirect())
                {
                    if (serialized.Contains(obj))
                    {
                        return;
                    }
                    else
                    {
                        serialized.Add(obj);
                    }
                }
                obj = PdfReader.GetPdfObject(obj);
                if (obj.IsStream())
                {
                    bb.Append("$B");
                    SerDic((PdfDictionary)obj, level - 1, bb, serialized);
                    if (level > 0)
                    {
                        bb.Append(DigestAlgorithms.Digest("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj)));
                    }
                }
                else if (obj.IsDictionary())
                {
                    SerDic((PdfDictionary)obj, level - 1, bb, serialized);
                }
                else if (obj.IsArray())
                {
                    SerArray((PdfArray)obj, level - 1, bb, serialized);
                }
                else if (obj.IsString())
                {
                    bb.Append("$S").Append(obj.ToString());
                }
                else if (obj.IsName())
                {
                    bb.Append("$N").Append(obj.ToString());
                }
                else
                {
                    bb.Append("$L").Append(obj.ToString());
                }
            }
        public PdfStream GetAsStream(PdfName key)
        {
            PdfStream stream = null;
            PdfObject orig   = GetDirectObject(key);

            if (orig != null && orig.IsStream())
            {
                stream = (PdfStream)orig;
            }
            return(stream);
        }
Exemple #4
0
        public PdfStream GetAsStream(int idx)
        {
            PdfStream stream = null;
            PdfObject orig   = GetDirectObject(idx);

            if (orig != null && orig.IsStream())
            {
                stream = (PdfStream)orig;
            }
            return(stream);
        }
        /// <summary>
        /// Gets the content stream of a page as a PdfStream object.
        /// @since   2.1.3 (the method already existed without param compressionLevel)
        /// </summary>
        /// <param name="pageNumber">the page of which you want the stream</param>
        /// <param name="compressionLevel">the compression level you want to apply to the stream</param>
        /// <returns>a PdfStream object</returns>
        internal PdfStream GetFormXObject(int pageNumber, int compressionLevel)
        {
            PdfDictionary page     = reader.GetPageNRelease(pageNumber);
            PdfObject     contents = PdfReader.GetPdfObjectRelease(page.Get(PdfName.Contents));
            PdfDictionary dic      = new PdfDictionary();

            byte[] bout = null;
            if (contents != null)
            {
                if (contents.IsStream())
                {
                    dic.Merge((PrStream)contents);
                }
                else
                {
                    bout = reader.GetPageContent(pageNumber, File);
                }
            }
            else
            {
                bout = new byte[0];
            }
            dic.Put(PdfName.Resources, PdfReader.GetPdfObjectRelease(page.Get(PdfName.Resources)));
            dic.Put(PdfName.TYPE, PdfName.Xobject);
            dic.Put(PdfName.Subtype, PdfName.Form);
            PdfImportedPage impPage = (PdfImportedPage)ImportedPages[pageNumber];

            dic.Put(PdfName.Bbox, new PdfRectangle(impPage.BoundingBox));
            PdfArray matrix = impPage.Matrix;

            if (matrix == null)
            {
                dic.Put(PdfName.Matrix, Identitymatrix);
            }
            else
            {
                dic.Put(PdfName.Matrix, matrix);
            }
            dic.Put(PdfName.Formtype, One);
            PrStream stream;

            if (bout == null)
            {
                stream = new PrStream((PrStream)contents, dic);
            }
            else
            {
                stream = new PrStream(reader, bout);
                stream.Merge(dic);
            }
            return(stream);
        }
        /**
         * Gets the content stream of a page as a PdfStream object.
         * @param   pageNumber          the page of which you want the stream
         * @param   compressionLevel    the compression level you want to apply to the stream
         * @return  a PdfStream object
         * @since   2.1.3 (the method already existed without param compressionLevel)
         */
        internal PdfStream GetFormXObject(int pageNumber, int compressionLevel)
        {
            PdfDictionary page     = reader.GetPageNRelease(pageNumber);
            PdfObject     contents = PdfReader.GetPdfObjectRelease(page.Get(PdfName.CONTENTS));
            PdfDictionary dic      = new PdfDictionary();

            byte[] bout = null;
            if (contents != null)
            {
                if (contents.IsStream())
                {
                    dic.Merge((PRStream)contents);
                }
                else
                {
                    bout = reader.GetPageContent(pageNumber, file);
                }
            }
            else
            {
                bout = new byte[0];
            }
            dic.Put(PdfName.RESOURCES, PdfReader.GetPdfObjectRelease(page.Get(PdfName.RESOURCES)));
            dic.Put(PdfName.TYPE, PdfName.XOBJECT);
            dic.Put(PdfName.SUBTYPE, PdfName.FORM);
            PdfImportedPage impPage = importedPages[pageNumber];

            dic.Put(PdfName.BBOX, new PdfRectangle(impPage.BoundingBox));
            PdfArray matrix = impPage.Matrix;

            if (matrix == null)
            {
                dic.Put(PdfName.MATRIX, IDENTITYMATRIX);
            }
            else
            {
                dic.Put(PdfName.MATRIX, matrix);
            }
            dic.Put(PdfName.FORMTYPE, ONE);
            PRStream stream;

            if (bout == null)
            {
                stream = new PRStream((PRStream)contents, dic);
            }
            else
            {
                stream = new PRStream(reader, bout);
                stream.Merge(dic);
            }
            return(stream);
        }
Exemple #7
0
        private static List <System.Drawing.Image> ExtractImages(byte[] PDFSourcePath)
        {
            List <System.Drawing.Image> ImgList = new List <System.Drawing.Image>();

            iTextSharp.text.pdf.PdfReader PDFReaderObj = null;
            iTextSharp.text.pdf.PdfObject PDFObj       = null;
            iTextSharp.text.pdf.PdfStream PDFStremObj  = null;

            try
            {
                PDFReaderObj = new iTextSharp.text.pdf.PdfReader(PDFSourcePath, null);

                for (int i = 0; i <= PDFReaderObj.XrefSize - 1; i++)
                {
                    PDFObj = PDFReaderObj.GetPdfObject(i);

                    if ((PDFObj != null) && PDFObj.IsStream())
                    {
                        PDFStremObj = (iTextSharp.text.pdf.PdfStream)PDFObj;
                        iTextSharp.text.pdf.PdfObject subtype = PDFStremObj.Get(iTextSharp.text.pdf.PdfName.SUBTYPE);

                        if ((subtype != null) && subtype.ToString() == iTextSharp.text.pdf.PdfName.IMAGE.ToString())
                        {
                            try
                            {
                                iTextSharp.text.pdf.parser.PdfImageObject PdfImageObj =
                                    new iTextSharp.text.pdf.parser.PdfImageObject((iTextSharp.text.pdf.PRStream)PDFStremObj);

                                System.Drawing.Image ImgPDF = PdfImageObj.GetDrawingImage();


                                ImgList.Add(ImgPDF);
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                }
                PDFReaderObj.Close();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return(ImgList);
        }
Exemple #8
0
            private void serObject(PdfObject obj, int level, ByteBuffer bb)
            {
                if (level <= 0)
                {
                    return;
                }

                if (obj == null)
                {
                    bb.Append("$Lnull");
                    return;
                }
                obj = PdfReader.GetPdfObject(obj);
                if (obj.IsStream())
                {
                    bb.Append("$B");
                    serDic((PdfDictionary)obj, level - 1, bb);
                    if (level > 0)
                    {
                        using (var md5 = MD5.Create())
                        {
                            bb.Append(md5.ComputeHash(PdfReader.GetStreamBytesRaw((PrStream)obj)));
                        }
                    }
                }
                else if (obj.IsDictionary())
                {
                    serDic((PdfDictionary)obj, level - 1, bb);
                }
                else if (obj.IsArray())
                {
                    serArray((PdfArray)obj, level - 1, bb);
                }
                else if (obj.IsString())
                {
                    bb.Append("$S").Append(obj.ToString());
                }
                else if (obj.IsName())
                {
                    bb.Append("$N").Append(obj.ToString());
                }
                else
                {
                    bb.Append("$L").Append(obj.ToString());
                }
            }
 private void SerObject(PdfObject obj, int level, ByteBuffer bb)
 {
     if (level <= 0)
     {
         return;
     }
     if (obj == null)
     {
         bb.Append("$Lnull");
         return;
     }
     obj = PdfReader.GetPdfObject(obj);
     if (obj.IsStream())
     {
         bb.Append("$B");
         SerDic((PdfDictionary)obj, level - 1, bb);
         if (level > 0)
         {
             bb.Append(PdfEncryption.DigestComputeHash("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj)));
         }
     }
     else if (obj.IsDictionary())
     {
         SerDic((PdfDictionary)obj, level - 1, bb);
     }
     else if (obj.IsArray())
     {
         SerArray((PdfArray)obj, level - 1, bb);
     }
     else if (obj.IsString())
     {
         bb.Append("$S").Append(obj.ToString());
     }
     else if (obj.IsName())
     {
         bb.Append("$N").Append(obj.ToString());
     }
     else
     {
         bb.Append("$L").Append(obj.ToString());
     }
 }
        /**
         * Displays an XObject using the registered handler for this XObject's subtype
         * @param xobjectName the name of the XObject to retrieve from the resource dictionary
         */
        private void DisplayXObject(PdfName xobjectName)
        {
            PdfDictionary xobjects = resources.GetAsDict(PdfName.XOBJECT);

            iTextSharp.text.pdf.PdfObject xobject = xobjects.GetDirectObject(xobjectName);
            PdfStream xobjectStream = (PdfStream)xobject;

            PdfName subType = xobjectStream.GetAsName(PdfName.SUBTYPE);

            if (xobject.IsStream())
            {
                IXObjectDoHandler handler;
                xobjectDoHandlers.TryGetValue(subType, out handler);
                if (handler == null)
                {
                    handler = xobjectDoHandlers[PdfName.DEFAULT];
                }
                handler.HandleXObject(this, xobjectStream, xobjects.GetAsIndirectObject(xobjectName));
            }
            else
            {
                throw new InvalidOperationException(MessageLocalization.GetComposedMessage("XObject.1.is.not.a.stream", xobjectName));
            }
        }
Exemple #11
0
            private void SerObject(PdfObject obj, int level, ByteBuffer bb, Dictionary <RefKey, int> serialized)
            {
                if (level <= 0)
                {
                    return;
                }
                if (obj == null)
                {
                    bb.Append("$Lnull");
                    return;
                }

                PdfIndirectReference refe    = null;
                ByteBuffer           savedBb = null;

                if (obj.IsIndirect())
                {
                    refe = (PdfIndirectReference)obj;
                    RefKey key = new RefKey(refe);
                    if (serialized.ContainsKey(key))
                    {
                        bb.Append(serialized[key]);
                        return;
                    }
                    else
                    {
                        savedBb = bb;
                        bb      = new ByteBuffer();
                    }
                }
                obj = PdfReader.GetPdfObject(obj);
                if (obj.IsStream())
                {
                    bb.Append("$B");
                    SerDic((PdfDictionary)obj, level - 1, bb, serialized);
                    if (level > 0)
                    {
                        bb.Append(DigestAlgorithms.Digest("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj)));
                    }
                }
                else if (obj.IsDictionary())
                {
                    SerDic((PdfDictionary)obj, level - 1, bb, serialized);
                }
                else if (obj.IsArray())
                {
                    SerArray((PdfArray)obj, level - 1, bb, serialized);
                }
                else if (obj.IsString())
                {
                    bb.Append("$S").Append(obj.ToString());
                }
                else if (obj.IsName())
                {
                    bb.Append("$N").Append(obj.ToString());
                }
                else
                {
                    bb.Append("$L").Append(obj.ToString());
                }

                if (savedBb != null)
                {
                    RefKey key = new RefKey(refe);
                    if (!serialized.ContainsKey(key))
                    {
                        serialized[key] = CalculateHash(bb.Buffer);
                    }
                    savedBb.Append(bb);
                }
            }
Exemple #12
0
 private void SerObject(PdfObject obj, int level, ByteBuffer bb)
 {
     if (level <= 0)
         return;
     if (obj == null) {
         bb.Append("$Lnull");
         return;
     }
     obj = PdfReader.GetPdfObject(obj);
     if (obj.IsStream()) {
         bb.Append("$B");
         SerDic((PdfDictionary)obj, level - 1, bb);
         if (level > 0) {
             bb.Append(PdfEncryption.DigestComputeHash("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj)));
         }
     }
     else if (obj.IsDictionary()) {
         SerDic((PdfDictionary)obj, level - 1, bb);
     }
     else if (obj.IsArray()) {
         SerArray((PdfArray)obj, level - 1, bb);
     }
     else if (obj.IsString()) {
         bb.Append("$S").Append(obj.ToString());
     }
     else if (obj.IsName()) {
         bb.Append("$N").Append(obj.ToString());
     }
     else
         bb.Append("$L").Append(obj.ToString());
 }
Exemple #13
0
 private void UpdateAnnotationReferences(PdfObject obj) {
     if (obj.IsArray()) {
         PdfArray array = (PdfArray)obj;
         for (int i = 0; i < array.Size; i++) {
             PdfObject o = array.GetPdfObject(i);
             if (o != null && o.Type == 0) {
                 PdfIndirectObject entry;
                 bool contains = unmergedIndirectRefsMap.TryGetValue(new RefKey((PdfIndirectReference) o), out entry);
                 if (contains) {
                     if (entry.objecti.IsDictionary()) {
                         PdfNumber annotId = ((PdfDictionary) entry.objecti).GetAsNumber(PdfCopy.annotId);
                         if (annotId != null) {
                             PdfIndirectObject merged;
                             if (mergedMap.TryGetValue(annotId.IntValue, out merged)) {
                                 array.Set(i, merged.IndirectReference);
                             }
                         }
                     }
                 }
             } else {
                 UpdateAnnotationReferences(o);
             }
         }
     } else if (obj.IsDictionary() || obj.IsStream()) {
         PdfDictionary dictionary = (PdfDictionary)obj;
         List<PdfName> keys = new List<PdfName>(dictionary.Keys);
         foreach (PdfName key in keys) {
             PdfObject o = dictionary.Get(key);
             if (o != null && o.Type == 0) {
                 PdfIndirectObject entry;
                 bool contains = unmergedIndirectRefsMap.TryGetValue(new RefKey((PdfIndirectReference) o), out entry);
                 if (contains) {
                     if (entry.objecti.IsDictionary()) {
                         PdfNumber annotId = ((PdfDictionary) entry.objecti).GetAsNumber(PdfCopy.annotId);
                         if (annotId != null) {
                             PdfIndirectObject merged;
                             if (mergedMap.TryGetValue(annotId.IntValue, out merged)) {
                                 dictionary.Put(key, merged.IndirectReference);
                             }
                         }
                     }
                 }
             } else {
                 UpdateAnnotationReferences(o);
             }
         }
     }
 }
Exemple #14
0
            private void SerObject(PdfObject obj, int level, ByteBuffer bb, Dictionary<RefKey, int> serialized)
            {
                if (level <= 0)
                    return;
                if (obj == null) {
                    bb.Append("$Lnull");
                    return;
                }

                PdfIndirectReference refe = null;
                ByteBuffer savedBb = null;

                if (obj.IsIndirect()) {
                    refe = (PdfIndirectReference)obj;
                    RefKey key = new RefKey(refe);
                    if (serialized.ContainsKey(key)) {
                        bb.Append(serialized[key]);
                        return;
                    }
                    else {
                        savedBb = bb;
                        bb = new ByteBuffer();
                    }
                }
                obj = PdfReader.GetPdfObject(obj);
                if (obj.IsStream()) {
                    bb.Append("$B");
                    SerDic((PdfDictionary)obj, level - 1, bb, serialized);
                    if (level > 0) {
                        bb.Append(DigestAlgorithms.Digest("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj)));
                    }
                }
                else if (obj.IsDictionary()) {
                    SerDic((PdfDictionary)obj, level - 1, bb,serialized);
                }
                else if (obj.IsArray()) {
                    SerArray((PdfArray)obj, level - 1, bb,serialized);
                }
                else if (obj.IsString()) {
                    bb.Append("$S").Append(obj.ToString());
                }
                else if (obj.IsName()) {
                    bb.Append("$N").Append(obj.ToString());
                }
                else
                    bb.Append("$L").Append(obj.ToString());

                if (savedBb != null) {
                    RefKey key = new RefKey(refe);
                    if (!serialized.ContainsKey(key))
                        serialized[key] = CalculateHash(bb.Buffer);
                    savedBb.Append(bb);
                }
            }
Exemple #15
0
            public void AlterContents()
            {
                if (over == null && under == null)
                {
                    return;
                }
                PdfArray  ar      = null;
                PdfObject content = PdfReader.GetPdfObject(pageN.Get(PdfName.CONTENTS), pageN);

                if (content == null)
                {
                    ar = new PdfArray();
                    pageN.Put(PdfName.CONTENTS, ar);
                }
                else if (content.IsArray())
                {
                    ar = (PdfArray)content;
                }
                else if (content.IsStream())
                {
                    ar = new PdfArray();
                    ar.Add(pageN.Get(PdfName.CONTENTS));
                    pageN.Put(PdfName.CONTENTS, ar);
                }
                else
                {
                    ar = new PdfArray();
                    pageN.Put(PdfName.CONTENTS, ar);
                }
                ByteBuffer out_p = new ByteBuffer();

                if (under != null)
                {
                    out_p.Append(PdfContents.SAVESTATE);
                    ApplyRotation(pageN, out_p);
                    out_p.Append(under.InternalBuffer);
                    out_p.Append(PdfContents.RESTORESTATE);
                }
                if (over != null)
                {
                    out_p.Append(PdfContents.SAVESTATE);
                }
                PdfStream stream = new PdfStream(out_p.ToByteArray());

                stream.FlateCompress(cstp.CompressionLevel);
                PdfIndirectReference ref1 = cstp.AddToBody(stream).IndirectReference;

                ar.AddFirst(ref1);
                out_p.Reset();
                if (over != null)
                {
                    out_p.Append(' ');
                    out_p.Append(PdfContents.RESTORESTATE);
                    out_p.Append(PdfContents.SAVESTATE);
                    ApplyRotation(pageN, out_p);
                    out_p.Append(over.InternalBuffer);
                    out_p.Append(PdfContents.RESTORESTATE);
                    stream = new PdfStream(out_p.ToByteArray());
                    stream.FlateCompress(cstp.CompressionLevel);
                    ar.Add(cstp.AddToBody(stream).IndirectReference);
                }
                pageN.Put(PdfName.RESOURCES, pageResources.Resources);
            }
Exemple #16
0
 private PdfObject Propagate(PdfObject obj) {
     if (obj == null) {
         return new PdfNull();
     } else if (obj.IsArray()) {
         PdfArray a = (PdfArray)obj;
         for (int i = 0; i < a.Size; i++) {
             a.Set(i, Propagate(a.GetPdfObject(i)));
         }
         return a;
     } else if (obj.IsDictionary() || obj.IsStream()) {
         PdfDictionary d = (PdfDictionary)obj;
         List<PdfName> keys = new List<PdfName>(d.Keys);
         foreach (PdfName key in keys) {
             d.Put(key, Propagate(d.Get(key)));
         }
         return d;
     } else if (obj.IsIndirect()) {
         obj = PdfReader.GetPdfObject(obj);
         return AddToBody(Propagate(obj)).IndirectReference;
     } else
         return obj;
 }
Exemple #17
0
 public new PdfIndirectObject AddToBody(PdfObject objecta, PdfIndirectReference refa, bool formBranching) {
     if (formBranching) {
         UpdateReferences(objecta);
     }
     PdfIndirectObject indObj;
     if ((tagged || mergeFields) && indirectObjects != null && (objecta.IsArray() || objecta.IsDictionary() || objecta.IsStream())) {
         RefKey key = new RefKey(refa);
         PdfIndirectObject obj;
         if (!indirectObjects.TryGetValue(key, out obj)) {
             obj = new PdfIndirectObject(refa, objecta, this);
             indirectObjects[key] = obj;
         }
         indObj =  obj;
     } else {
         indObj = base.AddToBody(objecta, refa);
     }
     if (mergeFields && objecta.IsDictionary()) {
         PdfNumber annotId = ((PdfDictionary)objecta).GetAsNumber(PdfCopy.annotId);
         if (annotId != null) {
             if (formBranching) {
                 mergedMap[annotId.IntValue] = indObj;
                 mergedSet.Add(indObj);
             } else {
                 unmergedMap[annotId.IntValue] = indObj;
                 unmergedSet.Add(indObj);
             }
         }
     }
     return indObj;
 }
Exemple #18
0
 private void UpdateReferences(PdfObject obj) {
     if (obj.IsDictionary() || obj.IsStream()) {
         PdfDictionary dictionary = (PdfDictionary)obj;
         PdfDictionary newDictionary = new PdfDictionary();
         foreach (PdfName key in dictionary.Keys) {
             PdfObject o = dictionary.Get(key);
             if (o.IsIndirect()) {
                 PdfReader reader = ((PRIndirectReference)o).Reader;
                 Dictionary<RefKey,IndirectReferences> indirects = indirectMap[reader];
                 IndirectReferences indRef = null;
                 if (indirects.TryGetValue(new RefKey((PRIndirectReference)o), out indRef)) {
                     newDictionary.Put(key, indRef.Ref);
                 }
             } else {
                 UpdateReferences(o);
             }
         }
         foreach (PdfName key in newDictionary.Keys) {
             dictionary.Put(key, newDictionary.Get(key));
         }
     } else if (obj.IsArray()) {
         PdfArray array = (PdfArray)obj;
         for (int i = 0; i < array.Size; i++) {
             PdfObject o = array[i];
             if (o.IsIndirect()) {
                 PdfReader reader = ((PRIndirectReference)o).Reader;
                 Dictionary<RefKey,IndirectReferences> indirects = indirectMap[reader];
                 IndirectReferences indRef = null;
                 if (indirects.TryGetValue(new RefKey((PRIndirectReference)o), out indRef)) {
                     array[i] = indRef.Ref;
                 }
             } else {
                 UpdateReferences(o);
             }
         }
     }
 }
Exemple #19
0
 private PdfObject Propagate(PdfObject obj) {
     if (obj == null) {
         return new PdfNull();
     } 
     if (obj.IsArray()) {
         PdfArray a = (PdfArray)obj;
         for (int i = 0; i < a.Size; i++) {
             a[i] = Propagate(a[i]);
         }
         return a;
     } 
     if (obj.IsDictionary() || obj.IsStream()) {
         PdfDictionary d = (PdfDictionary)obj;
         PdfDictionary newD = new PdfDictionary();
         foreach (PdfName key in d.Keys) {
             newD.Put(key, Propagate(d.Get(key)));
         }
         return newD;
     } 
     if (obj.IsIndirect()) {
         obj = PdfReader.GetPdfObject(obj);
         return AddToBody(Propagate(obj)).IndirectReference;
     } 
     return obj;
 }
Exemple #20
0
        private void UpdateAnnotationReferences(PdfObject obj) {
            if (obj.IsArray()) {
                PdfArray array = (PdfArray)obj;
                for (int i = 0; i < array.Size; i++) {
                    PdfObject o = array[i];
                    if (o is PdfIndirectReference) {
                        foreach (PdfIndirectObject entry in unmergedSet) {
                            if (entry.IndirectReference.ToString().Equals(o.ToString())) {
                                if (entry.objecti.IsDictionary()) {
                                    PdfNumber annotId = ((PdfDictionary)entry.objecti).GetAsNumber(PdfCopy.annotId);
                                    if (annotId != null) {
                                        PdfIndirectObject merged = null;
                                        if (mergedMap.TryGetValue(annotId.IntValue, out merged)) {
                                            array[i] = merged.IndirectReference;
                                        }
                                    }
                                }
                            }
                        }
                    } else {
                        UpdateAnnotationReferences(o);
                    }
                }
            } else if (obj.IsDictionary() || obj.IsStream()) {
                PdfDictionary dictionary = (PdfDictionary)obj;
                PdfDictionary newDictionary = new PdfDictionary();
                foreach (PdfName key in dictionary.Keys) {
                    PdfObject o = dictionary.Get(key);
                    if (o is PdfIndirectReference) {
                        foreach (PdfIndirectObject entry in unmergedSet) {
                            if (entry.IndirectReference.ToString().Equals(o.ToString())) {
                                if (entry.objecti.IsDictionary()) {
                                    PdfNumber annotId = ((PdfDictionary)entry.objecti).GetAsNumber(PdfCopy.annotId);
                                    if (annotId != null) {
                                        PdfIndirectObject merged;
                                        if (mergedMap.TryGetValue(annotId.IntValue, out merged)) {
                                            newDictionary.Put(key, merged.IndirectReference);
                                        }
                                    }
                                }
                            }
                        }
                    } else {
                        UpdateAnnotationReferences(o);
                    }
                }
                foreach (PdfName key in newDictionary.Keys) {
                    dictionary.Put(key, newDictionary.Get(key));
                }

            }
        }
Exemple #21
0
 private void SerObject(PdfObject obj, int level, ByteBuffer bb) {
     if (level <= 0)
         return;
     if (obj == null) {
         bb.Append("$Lnull");
         return;
     }
     if (obj.IsIndirect()) {
         if (serialized.Contains(obj))
             return;
         else
             serialized.Add(obj);
     }
     obj = PdfReader.GetPdfObject(obj);
     if (obj.IsStream()) {
         bb.Append("$B");
         SerDic((PdfDictionary)obj, level - 1, bb);
         if (level > 0) {
             bb.Append(DigestAlgorithms.Digest("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj)));
         }
     }
     else if (obj.IsDictionary()) {
         SerDic((PdfDictionary)obj, level - 1, bb);
     }
     else if (obj.IsArray()) {
         SerArray((PdfArray)obj, level - 1, bb);
     }
     else if (obj.IsString()) {
         bb.Append("$S").Append(obj.ToString());
     }
     else if (obj.IsName()) {
         bb.Append("$N").Append(obj.ToString());
     }
     else
         bb.Append("$L").Append(obj.ToString());
 }
Exemple #22
0
 public override PdfIndirectObject AddToBody(PdfObject objecta, PdfIndirectReference refa)
 {
     if (tagged && indirectObjects != null && (objecta.IsArray() || objecta.IsDictionary())) {
         RefKey key = new RefKey(refa);
         PdfIndirectObject obj;
         if (!indirectObjects.TryGetValue(key, out obj)) {
             obj = new PdfIndirectObject(refa, objecta, this);
             indirectObjects[key] = obj;
         }
         return obj;
     } else {
         if (tagged && objecta.IsStream())
             streams.Add(new RefKey(refa));
         return base.AddToBody(objecta, refa);
     }
 }
        /**
         * Translate a PRIndirectReference to a PdfIndirectReference
         * In addition, translates the object numbers, and copies the
         * referenced object to the output file if it wasn't available
         * in the cache yet. If it's in the cache, the reference to
         * the already used stream is returned.
         *
         * NB: PRIndirectReferences (and PRIndirectObjects) really need to know what
         * file they came from, because each file has its own namespace. The translation
         * we do from their namespace to ours is *at best* heuristic, and guaranteed to
         * fail under some circumstances.
         */
        protected override PdfIndirectReference CopyIndirect(PRIndirectReference inp)
        {
            PdfObject srcObj      = PdfReader.GetPdfObjectRelease(inp);
            ByteStore streamKey   = null;
            bool      validStream = false;

            if (srcObj.IsStream())
            {
                streamKey   = new ByteStore((PRStream)srcObj, serialized);
                validStream = true;
                PdfIndirectReference streamRef;
                if (streamMap.TryGetValue(streamKey, out streamRef))
                {
                    return(streamRef);
                }
            }
            else if (srcObj.IsDictionary())
            {
                streamKey   = new ByteStore((PdfDictionary)srcObj, serialized);
                validStream = true;
                PdfIndirectReference streamRef;
                if (streamMap.TryGetValue(streamKey, out streamRef))
                {
                    return(streamRef);
                }
            }

            PdfIndirectReference theRef;
            RefKey             key = new RefKey(inp);
            IndirectReferences iRef;

            indirects.TryGetValue(key, out iRef);
            if (iRef != null)
            {
                theRef = iRef.Ref;
                if (iRef.Copied)
                {
                    return(theRef);
                }
            }
            else
            {
                theRef         = body.PdfIndirectReference;
                iRef           = new IndirectReferences(theRef);
                indirects[key] = iRef;
            }
            if (srcObj.IsDictionary())
            {
                PdfObject type = PdfReader.GetPdfObjectRelease(((PdfDictionary)srcObj).Get(PdfName.TYPE));
                if (type != null)
                {
                    if ((PdfName.PAGE.Equals(type)))
                    {
                        return(theRef);
                    }
                    if ((PdfName.CATALOG.Equals(type)))
                    {
                        LOGGER.Warn(MessageLocalization.GetComposedMessage("make.copy.of.catalog.dictionary.is.forbidden"));
                        return(null);
                    }
                }
            }
            iRef.SetCopied();

            if (validStream)
            {
                streamMap[streamKey] = theRef;
            }

            PdfObject obj = CopyObject(srcObj);

            AddToBody(obj, theRef);
            return(theRef);
        }
Exemple #24
0
            public void AlterContents()
            {
                if (_over == null && _under == null)
                {
                    return;
                }
                PdfArray  ar      = null;
                PdfObject content = PdfReader.GetPdfObject(_pageN.Get(PdfName.Contents), _pageN);

                if (content == null)
                {
                    ar = new PdfArray();
                    _pageN.Put(PdfName.Contents, ar);
                }
                else if (content.IsArray())
                {
                    ar = (PdfArray)content;
                }
                else if (content.IsStream())
                {
                    ar = new PdfArray();
                    ar.Add(_pageN.Get(PdfName.Contents));
                    _pageN.Put(PdfName.Contents, ar);
                }
                else
                {
                    ar = new PdfArray();
                    _pageN.Put(PdfName.Contents, ar);
                }
                ByteBuffer outP = new ByteBuffer();

                if (_under != null)
                {
                    outP.Append(PdfContents.Savestate);
                    applyRotation(_pageN, outP);
                    outP.Append(_under.InternalBuffer);
                    outP.Append(PdfContents.Restorestate);
                }
                if (_over != null)
                {
                    outP.Append(PdfContents.Savestate);
                }
                PdfStream stream = new PdfStream(outP.ToByteArray());

                stream.FlateCompress(_cstp.CompressionLevel);
                PdfIndirectReference ref1 = _cstp.AddToBody(stream).IndirectReference;

                ar.AddFirst(ref1);
                outP.Reset();
                if (_over != null)
                {
                    outP.Append(' ');
                    outP.Append(PdfContents.Restorestate);
                    outP.Append(PdfContents.Savestate);
                    applyRotation(_pageN, outP);
                    outP.Append(_over.InternalBuffer);
                    outP.Append(PdfContents.Restorestate);
                    stream = new PdfStream(outP.ToByteArray());
                    stream.FlateCompress(_cstp.CompressionLevel);
                    ar.Add(_cstp.AddToBody(stream).IndirectReference);
                }
                _pageN.Put(PdfName.Resources, _pageResources.Resources);
            }