示例#1
0
        // ---------------------------------------------------------------------------

        /**
         * @see com.itextpdf.text.pdf.parser.RenderListener#renderImage(
         *     com.itextpdf.text.pdf.parser.ImageRenderInfo)
         */
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image = renderInfo.GetImage();
            //PdfName filter = (PdfName)image.Get(PdfName.FILTER);

            string imageName      = string.Format("{0:0000}_{1:0000}.{2}", PageIndex, ImagesList.Count, image.GetImageBytesType().FileExtension);
            var    pageImageIndex = new PageImageIndex
            {
                ImageName  = imageName,
                ImageIndex = ImagesList.Count,
                PageIndex  = PageIndex
            };
            var imageType = image.GetImageBytesType();
            //if (imageType != PdfImageObject.ImageBytesType.JBIG2)
            //{
            //var bmp = image.GetDrawingImage();

            // Write image to file
            string pathToSave = string.Format(@"{0}\{1}", OutputPath, imageName);

            //bmp.Save(string.Format(pathToSave));
            // bmp.Dispose();

            // Sometime gdi+ error happen. We must write byte directly to disk
            if (!Directory.Exists(OutputPath))
            {
                Directory.CreateDirectory(OutputPath);
            }
            var bytes = image.GetImageAsBytes();

            File.WriteAllBytes(pathToSave, bytes);

            ImagesList.Add(pageImageIndex, null);
            //}
        }
示例#2
0
// ---------------------------------------------------------------------------

        /**
         * @see com.itextpdf.text.pdf.parser.RenderListener#renderImage(
         *     com.itextpdf.text.pdf.parser.ImageRenderInfo)
         */
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            try {
                PdfImageObject image = renderInfo.GetImage();
                if (image == null

/*
 * do not attempt to parse => jbig2 decoder not fully implemented.
 * THE JAVA EXAMPLE INCORRECTLY CREATES A CORRUPT JBIG2 IMAGE
 * BECAUSE THERE IS NO EXPLICIT CHECK. I POSTED TWICE TO THE MAILING
 * LIST, SINCE VERSION 5.1.3 BUT THE ERROR HAS NOT BEEN CORRECTED.
 */
                    || image.GetImageBytesType() == PdfImageObject.ImageBytesType.JBIG2
                    )
                {
                    return;
                }

                _imageNames.Add(string.Format(
                                    "Image{0}.{1}",
                                    renderInfo.GetRef().Number, image.GetFileType()
                                    ));
                _myImages.Add(image.GetImageAsBytes());
            }
            catch {
// pass through any other unsupported image types
            }
        }
示例#3
0
    public void RenderImage(ImageRenderInfo renderInfo)
    {
        try {
            PdfImageObject image = renderInfo.GetImage();
            if (image == null || image.GetImageBytesType() == PdfImageObject.ImageBytesType.JBIG2)
            {
                return;
            }

            _imageNames.Add(string.Format("Image{0}.{1}", renderInfo.GetRef().Number, image.GetFileType()));
            _myImages.Add(image.GetImageAsBytes());
        }
        catch
        {
        }
    }
示例#4
0
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject pdfimage = renderInfo.GetImage();
            string         pp       = pdfimage.GetImageBytesType().FileExtension;

            string imgtp = pdfimage.GetFileType();

            if ("jpg".Equals(imgtp, StringComparison.OrdinalIgnoreCase) ||
                "png".Equals(imgtp, StringComparison.OrdinalIgnoreCase) ||
                "gif".Equals(imgtp, StringComparison.OrdinalIgnoreCase))
            {
            }
            else
            {
                imgtp = pp;
                imgtp = "png";
            }
            String imageFileName = String.Format("{0}_{1:000}_{2}.{3}", _imgname, _currentPage, _imgNo, imgtp);

//			imageFileName= _outputFolder+"\\"+_imgname+_currentPage.ToString("_000")+"_"+_imgNo+".png";
            imageFileName = _outputFolder + "\\" + imageFileName;
            try{
                using (Image dotnetImg = pdfimage.GetDrawingImage())
                {
                    if (dotnetImg != null)
                    {
                        if (_pageRotation == 270)
                        {
                            dotnetImg.RotateFlip(RotateFlipType.Rotate270FlipNone);
                        }
                        else if (_pageRotation == 90)
                        {
                            dotnetImg.RotateFlip(RotateFlipType.Rotate90FlipNone);
                        }
                        else if (_pageRotation == 180)
                        {
                            dotnetImg.RotateFlip(RotateFlipType.Rotate180FlipNone);
                        }
                        dotnetImg.Save(imageFileName);
                    }
                }
            }catch (Exception ee) {
                System.Diagnostics.Debug.WriteLine(ee.StackTrace);
            }
            _imgNo++;
        }
示例#5
0
        /// <summary>
        /// Gets image from PDF and compresses it - Found on StackOverflow - asis
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="quality"></param>
        public static void ReduceResolution(PdfReader reader, long quality)
        {
            int n = reader.XrefSize;

            for (int i = 0; i < n; i++)
            {
                PdfObject obj = reader.GetPdfObject(i);
                if (obj == null || !obj.IsStream())
                {
                    continue;
                }

                PdfDictionary dict    = (PdfDictionary)PdfReader.GetPdfObject(obj);
                PdfName       subType = (PdfName)PdfReader.GetPdfObject(
                    dict.Get(PdfName.SUBTYPE)
                    );
                if (!PdfName.IMAGE.Equals(subType))
                {
                    continue;
                }

                PRStream stream = (PRStream)obj;
                try
                {
                    PdfImageObject image = new PdfImageObject(stream);
                    //PdfName filter = (PdfName)image.Get(PdfName.FILTER);
                    //if (
                    //  PdfName.JBIG2DECODE.Equals(filter)
                    //  || PdfName.JPXDECODE.Equals(filter)
                    //  || PdfName.CCITTFAXDECODE.Equals(filter)
                    //  || PdfName.FLATEDECODE.Equals(filter)
                    //) continue;

                    System.Drawing.Image img = image.GetDrawingImage();
                    if (img == null)
                    {
                        continue;
                    }

                    var ll     = image.GetImageBytesType();
                    int width  = img.Width;
                    int height = img.Height;
                    using (System.Drawing.Bitmap dotnetImg =
                               new System.Drawing.Bitmap(img))
                    {
                        // set codec to jpeg type => jpeg index codec is "1"
                        System.Drawing.Imaging.ImageCodecInfo codec =
                            System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()[1];
                        // set parameters for image quality
                        System.Drawing.Imaging.EncoderParameters eParams =
                            new System.Drawing.Imaging.EncoderParameters(1);
                        eParams.Param[0] =
                            new System.Drawing.Imaging.EncoderParameter(
                                System.Drawing.Imaging.Encoder.Quality, quality
                                );
                        using (MemoryStream msImg = new MemoryStream())
                        {
                            dotnetImg.Save(msImg, codec, eParams);
                            msImg.Position = 0;
                            stream.SetData(msImg.ToArray());
                            stream.SetData(
                                msImg.ToArray(), false, PRStream.BEST_COMPRESSION
                                );
                            stream.Put(PdfName.TYPE, PdfName.XOBJECT);
                            stream.Put(PdfName.SUBTYPE, PdfName.IMAGE);
                            stream.Put(PdfName.FILTER, image.Get(PdfName.FILTER));
                            stream.Put(PdfName.FILTER, PdfName.DCTDECODE);
                            stream.Put(PdfName.WIDTH, new PdfNumber(width));
                            stream.Put(PdfName.HEIGHT, new PdfNumber(height));
                            stream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
                            stream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB);
                        }
                    }
                }
                catch
                {
                    // throw;
                    // iText[Sharp] can't handle all image types...
                }
                finally
                {
                    // may or may not help
                    reader.RemoveUnusedObjects();
                }
            }
        }
示例#6
0
        // ---------------------------------------------------------------------------

        /**
         * @see com.itextpdf.text.pdf.parser.RenderListener#renderImage(
         *     com.itextpdf.text.pdf.parser.ImageRenderInfo)
         */
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image = renderInfo.GetImage();

            //PdfName filter = (PdfName)image.Get(PdfName.FILTER);

            _imageNames.Add(string.Format("{0:0000}_{1:0000}.{2}", PageIndex, _imageNames.Count, image.GetImageBytesType().FileExtension));
            _ImageBytes.Add(image.GetImageAsBytes());
        }