Beispiel #1
1
        //-------------------------------------------------------------------------
        private bool ExtractImages(String PDFSourcePath, Audit sourceAudit, out Exception exception)
        {
            //List<System.Drawing.Image> ImgList = new List<System.Drawing.Image>();

            exception = null;
            iTextSharp.text.pdf.RandomAccessFileOrArray RAFObj = null;
            iTextSharp.text.pdf.PdfReader PDFReaderObj = null;
            iTextSharp.text.pdf.PdfObject PDFObj = null;
            iTextSharp.text.pdf.PdfStream PDFStremObj = null;
            int pageNumber = 0;
            bool ok = false;
            try
            {
                RAFObj = new iTextSharp.text.pdf.RandomAccessFileOrArray(PDFSourcePath);
                PDFReaderObj = new iTextSharp.text.pdf.PdfReader(RAFObj, null);
                for (int i = 0; i < PDFReaderObj.XrefSize; 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();
                                pageNumber++;
                                if (pageNumber > PDFReaderObj.NumberOfPages)
                                    return false;
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                }
                pageNumber = 0;
                PageCount = PDFReaderObj.NumberOfPages;
                for (int i = 0; i < PDFReaderObj.XrefSize; 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();
                                pageNumber++;
                                //using (Bitmap bmp = new Bitmap(ImgPDF))
                                //{
                                //    SaveFrameFiles(PDFSourcePath, sourceAudit, bmp, pageNumber, PageCount);
                                try
                                {
                                    SaveFrameFiles(PDFSourcePath, sourceAudit, (Bitmap)ImgPDF, pageNumber, PageCount);
                                }
                                catch (Exception)
                                {
                                    ImgPDF.Dispose();
                                    continue;
                                }
                                ImgPDF.Dispose();
                                ok = true;
                                //}
                            }
                            catch (Exception)
                            { }
                        }
                    }
                }
                return ok;
            }
            catch (Exception)// ex
            {
                //log.LogMessage(PDFSourcePath + " Page" + pageNumber.ToString() + " ", ex);
                return false;
            }
            finally
            {
                PDFReaderObj.Close();
                PDFReaderObj.Dispose();
            }
        }
Beispiel #2
0
 private void TestFile(String filename, int page, String objectid)
 {
     PdfReader pdfReader = TestResourceUtils.GetResourceAsPdfReader(TEST_RESOURCES_PATH, filename);
     try
     {
         PdfDictionary resources = pdfReader.GetPageResources(page);
         PdfDictionary xobjects = resources.GetAsDict(PdfName.XOBJECT);
         PdfIndirectReference objRef = xobjects.GetAsIndirectObject(new PdfName(objectid));
         if (objRef == null)
             throw new NullReferenceException("Reference " + objectid + " not found - Available keys are " + xobjects.Keys);
         PRStream stream = (PRStream)PdfReader.GetPdfObject(objRef);
         PdfDictionary colorSpaceDic = resources != null ? resources.GetAsDict(PdfName.COLORSPACE) : null;
         PdfImageObject img = new PdfImageObject(stream, colorSpaceDic);
         byte[] result = img.GetImageAsBytes();
         Assert.NotNull(result);
         int zeroCount = 0;
         foreach (byte b in result)
         {
             if (b == 0) zeroCount++;
         }
         Assert.IsTrue(zeroCount > 0);
     }
     finally
     {
         pdfReader.Close();
     }
 }
        private void PrepareImageObject()
        {
            if (imageObject != null)
            {
                return;
            }

            PRStream stream = (PRStream)PdfReader.GetPdfObject(refi);

            imageObject = new PdfImageObject(stream);
        }
        // ---------------------------------------------------------------------------
        /**
         * Manipulates a PDF file src with the byte array as result
         */
        public byte[] ManipulatePdf(byte[] pdf)
        {
            PdfName key = new PdfName("ITXT_SpecialId");
              PdfName value = new PdfName("123456789");
              // Read the file
              PdfReader reader = new PdfReader(pdf);
              int n = reader.XrefSize;
              PdfObject pdfObject;
              PRStream prStream;
              // Look for image and manipulate image prStream
              for (int i = 0; i < n; i++) {
            pdfObject = reader.GetPdfObject(i);
            if (pdfObject == null || !pdfObject.IsStream()) continue;

            prStream = (PRStream) pdfObject;
            byte[] imageBytes;
            if (value.Equals(prStream.Get(key))) {
              PdfImageObject image = new PdfImageObject(prStream);
              using (System.Drawing.Image original = image.GetDrawingImage()) {
            if (original == null) continue;
            int width = (int)(original.Width * FACTOR);
            int height = (int)(original.Height * FACTOR);

            using (System.Drawing.Image thumb = new Bitmap(width, height) ) {
              using ( Graphics graphic = Graphics.FromImage(thumb) ) {
                graphic.DrawImage(original, 0, 0, width, height);
                using (MemoryStream ms = new MemoryStream()) {
                  thumb.Save(ms, ImageFormat.Jpeg);
                  imageBytes = ms.ToArray();
                }
              }
            }
            prStream.Clear();
            prStream.SetData(imageBytes, false, PRStream.NO_COMPRESSION);
            prStream.Put(PdfName.TYPE, PdfName.XOBJECT);
            prStream.Put(PdfName.SUBTYPE, PdfName.IMAGE);
            prStream.Put(key, value);
            prStream.Put(PdfName.FILTER, PdfName.DCTDECODE);
            prStream.Put(PdfName.WIDTH, new PdfNumber(width));
            prStream.Put(PdfName.HEIGHT, new PdfNumber(height));
            prStream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
            prStream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB);
              }
            }
              }
              // Save altered PDF
              using (MemoryStream ms = new MemoryStream()) {
            using (PdfStamper stamper = new PdfStamper(reader, ms)) {
            }
            return ms.ToArray();
              }
        }
Beispiel #5
0
        private void PrepareImageObject()
        {
            if (imageObject != null)
            {
                return;
            }

            if (refi != null)
            {
                PRStream stream = (PRStream)PdfReader.GetPdfObject(refi);
                imageObject = new PdfImageObject(stream, colorSpaceDictionary);
            }
            else if (inlineImageInfo != null)
            {
                imageObject = new PdfImageObject(inlineImageInfo.ImageDictionary, inlineImageInfo.Samples, colorSpaceDictionary);
            }
        }
Beispiel #6
0
        /// <summary>
        /// https://stackoverflow.com/questions/802269/extract-images-using-itextsharp
        /// </summary>
        private static IList <System.Drawing.Image> GetImagesFromPdfDict(PdfDictionary dict, PdfReader doc)
        {
            List <System.Drawing.Image> images = new List <System.Drawing.Image>();
            PdfDictionary res  = (PdfDictionary)(PdfReader.GetPdfObject(dict.Get(PdfName.RESOURCES)));
            PdfDictionary xobj = (PdfDictionary)(PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT)));

            if (xobj != null)
            {
                foreach (PdfName name in xobj.Keys)
                {
                    PdfObject obj = xobj.Get(name);
                    if (obj.IsIndirect())
                    {
                        PdfDictionary tg      = (PdfDictionary)(PdfReader.GetPdfObject(obj));
                        PdfName       subtype = (PdfName)(PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE)));
                        if (PdfName.IMAGE.Equals(subtype))
                        {
                            int       xrefIdx = ((PRIndirectReference)obj).Number;
                            PdfObject pdfObj  = doc.GetPdfObject(xrefIdx);
                            PdfStream str     = (PdfStream)(pdfObj);

                            iTextSharp.text.pdf.parser.PdfImageObject pdfImage =
                                new iTextSharp.text.pdf.parser.PdfImageObject((PRStream)str);
                            System.Drawing.Image img = pdfImage.GetDrawingImage();

                            images.Add(img);
                        }
                        else if (PdfName.FORM.Equals(subtype) || PdfName.GROUP.Equals(subtype))
                        {
                            images.AddRange(GetImagesFromPdfDict(tg, doc));
                        }
                    }
                }
            }

            return(images);
        }
Beispiel #7
0
 private void PrepareImageObject() {
     if (imageObject != null)
         return;
     
     if (refi != null){
         PRStream stream = (PRStream)PdfReader.GetPdfObject(refi);
         imageObject = new PdfImageObject(stream, colorSpaceDictionary);
     } else if (inlineImageInfo != null){
         imageObject = new PdfImageObject(inlineImageInfo.ImageDictionary, inlineImageInfo.Samples, colorSpaceDictionary);
     }
 }
        /**
         * Create an ImageRenderInfo object based on inline image data.  This is nowhere near completely thought through
         * and really just acts as a placeholder.
         * @param ctm the coordinate transformation matrix at the time the image is rendered
         * @param imageObject the image object representing the inline image
         * @return the ImageRenderInfo representing the rendered embedded image
         * @since 5.0.1
         */
        protected internal static ImageRenderInfo CreatedForEmbeddedImage(Matrix ctm, PdfImageObject imageObject)
        {
            ImageRenderInfo renderInfo = new ImageRenderInfo(ctm, null);

            renderInfo.imageObject = imageObject;
            return(renderInfo);
        }
Beispiel #9
0
 /**
  * Create an ImageRenderInfo object based on inline image data.  This is nowhere near completely thought through
  * and really just acts as a placeholder.
  * @param ctm the coordinate transformation matrix at the time the image is rendered
  * @param imageObject the image object representing the inline image
  * @return the ImageRenderInfo representing the rendered embedded image
  * @since 5.0.1
  */
 protected internal static ImageRenderInfo CreatedForEmbeddedImage(Matrix ctm, PdfImageObject imageObject){
     ImageRenderInfo renderInfo = new ImageRenderInfo(ctm, null);
     renderInfo.imageObject = imageObject;
     return renderInfo;
 }
Beispiel #10
0
 private void PrepareImageObject() {
     if (imageObject != null)
         return;
     
     PRStream stream = (PRStream)PdfReader.GetPdfObject(refi);
     imageObject = new PdfImageObject(stream);        
 }
Beispiel #11
0
        private Bitmap GetImagesFromPdfDict(PdfDictionary dict)
        {
            PdfDictionary res  = (PdfDictionary)(PdfReader.GetPdfObject(dict.Get(PdfName.RESOURCES)));
            PdfDictionary xobj = (PdfDictionary)(PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT)));
            Bitmap        bm   = null;

            if (xobj != null)
            {
                foreach (PdfName name in xobj.Keys)
                {
                    PdfObject obj = xobj.Get(name);
                    if (obj.IsIndirect())
                    {
                        PdfDictionary tg      = (PdfDictionary)(PdfReader.GetPdfObject(obj));
                        PdfName       subtype = (PdfName)(PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE)));
                        if (PdfName.IMAGE.Equals(subtype))
                        {
                            int       xrefIdx = ((PRIndirectReference)obj).Number;
                            PdfObject pdfObj  = this.reader.GetPdfObject(xrefIdx);
                            PRStream  str     = (PRStream)(pdfObj);

                            PdfArray decode = tg.GetAsArray(PdfName.DECODE);
                            int      width  = tg.GetAsNumber(PdfName.WIDTH).IntValue;
                            int      height = tg.GetAsNumber(PdfName.HEIGHT).IntValue;
                            int      bpc    = tg.GetAsNumber(PdfName.BITSPERCOMPONENT).IntValue;
                            var      filter = tg.Get(PdfName.FILTER);

                            if (filter.Equals(PdfName.FLATEDECODE))
                            {
                                var imageBytes = PdfReader.GetStreamBytesRaw(str);

                                var decodedBytes = PdfReader.FlateDecode(imageBytes);                                           //decode the raw image
                                var streamBytes  = PdfReader.DecodePredictor(decodedBytes, str.GetAsDict(PdfName.DECODEPARMS)); //decode predict to filter the bytes
                                var pixelFormat  = PixelFormat.Format1bppIndexed;
                                switch (bpc)                                                                                    //determine the BPC
                                {
                                case 1:
                                    pixelFormat = PixelFormat.Format1bppIndexed;
                                    break;

                                case 8:
                                    pixelFormat = PixelFormat.Format8bppIndexed;
                                    break;

                                case 24:
                                    pixelFormat = PixelFormat.Format24bppRgb;
                                    break;
                                }

                                bm = new Bitmap(width, height, pixelFormat);
                                {
                                    var bmpData = bm.LockBits(new System.Drawing.Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, pixelFormat);
                                    var length  = (int)Math.Ceiling(width * bpc / 8.0);
                                    for (int i = 0; i < height; i++)
                                    {
                                        int offset     = i * length;
                                        int scanOffset = i * bmpData.Stride;
                                        Marshal.Copy(streamBytes, offset, new IntPtr(bmpData.Scan0.ToInt32() + scanOffset), length);
                                    }
                                    bm.UnlockBits(bmpData);
                                }
                            }
                            else
                            {
                                iTextSharp.text.pdf.parser.PdfImageObject pdfImage = new iTextSharp.text.pdf.parser.PdfImageObject(str);

                                bm = (System.Drawing.Bitmap)pdfImage.GetDrawingImage();
                            }
                            int yDPI = bm.Height / 11;
                            int xDPI = (bm.Width * 2) / 17;

                            xDPI = Math.Abs(xDPI - 300) < 10 ? 300 : xDPI;
                            yDPI = Math.Abs(yDPI - 300) < 10 ? 300 : yDPI;
                            xDPI = Math.Abs(xDPI - 600) < 10 ? 600 : xDPI;
                            yDPI = Math.Abs(yDPI - 600) < 10 ? 600 : yDPI;

                            if (xDPI == yDPI)
                            {
                                bm.SetResolution(xDPI, yDPI);
                            }
                            else
                            {
                            }
                            break;
                        }
                        else if (PdfName.FORM.Equals(subtype) || PdfName.GROUP.Equals(subtype))
                        {
                            GetImagesFromPdfDict(tg);
                        }
                    }
                }
            }
            return(bm);
        }