public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image  = renderInfo.GetImage();
            var            filter = (PdfName)image.Get(PdfName.FILTER);

            if (filter != null)
            {
                System.Drawing.Image drawingImage = image.GetDrawingImage();
                string extension = ".";

                if (filter == PdfName.DCTDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JPG.FileExtension;
                }
                else if (filter == PdfName.JPXDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JP2.FileExtension;
                }
                else if (filter == PdfName.FLATEDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.PNG.FileExtension;
                }
                else if (filter == PdfName.LZWDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.CCITT.FileExtension;
                }


                this.Images.Add(drawingImage, extension);
                string path = System.IO.Path.GetFullPath(System.AppDomain.CurrentDomain.BaseDirectory);
                drawingImage.Save(path + "temp" + extension, drawingImage.RawFormat);
            }
        }
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image  = renderInfo.GetImage();
            PdfName        filter = (PdfName)image.Get(PdfName.FILTER);

            if (filter != null)
            {
                System.Drawing.Image drawingImage = image.GetDrawingImage();
                string extension = ".";
                if (filter == PdfName.DCTDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JPG.FileExtension;
                }
                else if (filter == PdfName.JPXDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JP2.FileExtension;
                }
                else if (filter == PdfName.FLATEDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.PNG.FileExtension;
                }
                else if (filter == PdfName.LZWDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.CCITT.FileExtension;
                }
                this.Images.Add(drawingImage, extension);
            }
        }
            public void RenderImage(ImageRenderInfo renderInfo)
            {
                PdfImageObject image = renderInfo.GetImage();

                var pdfObject = image.Get(PdfName.FILTER);

                PdfName filter = null;

                if (pdfObject is PdfName)
                {
                    filter = (PdfName)pdfObject;
                    var drawingImage = GetImage(filter, image);
                    if (drawingImage != null)
                    {
                        Images.Add(drawingImage.Item2, drawingImage.Item1);
                    }
                }

                if (pdfObject is PdfArray)
                {
                    var pdfArray = (PdfArray)pdfObject;
                    foreach (PdfName pdfName in pdfArray)
                    {
                        var drawingImage = GetImage(pdfName, image);
                        Images.Add(drawingImage.Item2, drawingImage.Item1);
                    }
                }
            }
示例#4
0
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image  = renderInfo.GetImage();
            PdfName        filter = (PdfName)image.Get(PdfName.FILTER);

            //int width = Convert.ToInt32(image.Get(PdfName.WIDTH).ToString());
            //int bitsPerComponent = Convert.ToInt32(image.Get(PdfName.BITSPERCOMPONENT).ToString());
            //string subtype = image.Get(PdfName.SUBTYPE).ToString();
            //int height = Convert.ToInt32(image.Get(PdfName.HEIGHT).ToString());
            //int length = Convert.ToInt32(image.Get(PdfName.LENGTH).ToString());
            //string colorSpace = image.Get(PdfName.COLORSPACE).ToString();

            /* It appears to be safe to assume that when filter == null, PdfImageObject
             * does not know how to decode the image to a System.Drawing.Image.
             *
             * Uncomment the code above to verify, but when I've seen this happen,
             * width, height and bits per component all equal zero as well. */
            if (filter != null)
            {
                System.Drawing.Image drawingImage = image.GetDrawingImage();

                string extension = ".";

                if (filter == PdfName.DCTDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JPG.FileExtension;
                }
                else if (filter == PdfName.JPXDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JP2.FileExtension;
                }
                else if (filter == PdfName.FLATEDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.PNG.FileExtension;
                }
                else if (filter == PdfName.LZWDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.CCITT.FileExtension;
                }

                /* Rather than struggle with the image stream and try to figure out how to handle
                 * BitMapData scan lines in various formats (like virtually every sample I've found
                 * online), use the PdfImageObject.GetDrawingImage() method, which does the work for us. */
                this.Images.Add(drawingImage, extension);
            }
        }
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image  = renderInfo.GetImage();
            PdfName        filter = (PdfName)image.Get(PdfName.FILTER);

            if (filter != null)
            {
                try
                {
                    Image drawingImage = image.GetDrawingImage();
                    _images.Add(drawingImage);
                }
                catch (Exception)
                {
                    // _log.Error(e.Message);
                }
            }
        }
            public void RenderImage(ImageRenderInfo info)
            {
                PdfImageObject image    = info.GetImage();
                var            fileType = image.GetFileType();
                var            imgBytes = image.GetImageAsBytes();
                var            imgDict  = image.GetDictionary();
                var            imgInfo  = "Unknown";
                var            filter   = image.Get(PdfName.FILTER);

                if (filter != null)
                {
                    imgInfo = filter.ToString().Replace(',', ' ');
                }

                var ctm       = info.GetImageCTM();
                var ctmWidth  = ctm[Matrix.I11];
                var ctmHeight = ctm[Matrix.I22];

                int         imgWidth      = -1;
                int         imgHeight     = -1;
                int         imgResolution = -1;
                PixelFormat imgFormat     = PixelFormat.Undefined;

                if (imgInfo != "/JBIG2Decode" && imgInfo != "/JPXDecode")
                {
                    var img = image.GetDrawingImage();
                    imgWidth      = img.Width;
                    imgHeight     = img.Height;
                    imgFormat     = img.PixelFormat;
                    imgResolution = Convert.ToInt32(img.VerticalResolution);
                    img.Dispose();
                }

                Images.Add(new PDFImageInfo()
                {
                    ImageBytes  = imgBytes.Length, ImageFormat = imgFormat.ToString(),
                    ImageHeight = imgHeight, ImageWidth = imgWidth, ImageResolution = imgResolution,
                    ImageInfo   = imgInfo, ImageType = fileType
                });
            }
示例#7
0
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image  = renderInfo.GetImage();
            PdfName        filter = (PdfName)image.Get(PdfName.FILTER);


            if (filter != null)
            {
                var    drawingImage = image.GetImageAsBytes();
                string extension    = ".";
                if (filter == PdfName.DCTDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JPG.FileExtension;
                }
                else if (filter == PdfName.JPXDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.JP2.FileExtension;
                }
                else if (filter == PdfName.FLATEDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.PNG.FileExtension;
                }
                else if (filter == PdfName.LZWDECODE)
                {
                    extension += PdfImageObject.ImageBytesType.CCITT.FileExtension;
                }

                /* Rather than struggle with the image stream and try to figure out how to handle
                 * BitMapData scan lines in various formats (like virtually every sample I’ve found
                 * online), use the PdfImageObject.GetDrawingImage() method, which does the work for us. */

                var skbit = SkiaSharp.SKBitmap.Decode(drawingImage);
                var skimg = SKImage.FromBitmap(skbit);
                this.Images.Add(skimg, extension);
            }
        }
示例#8
0
        public void RenderImage(ImageRenderInfo renderInfo)
        {
            PdfImageObject image = renderInfo.GetImage();


            var v = PdfName.FILTER;

            //PdfArray array = new PdfArray();
            //array.Add(PdfName.FLATEDECODE);
            //array.Add(PdfName.DCTDECODE);
            //imgStream.put(PdfName.FILTER, array);
            //PdfName filter = (PdfName)image.Get(PdfName.FILTER);
            PdfName filter           = (PdfName)image.Get(PdfName.FIRST);
            int     width            = Convert.ToInt32(image.Get(PdfName.WIDTH).ToString());
            int     bitsPerComponent = Convert.ToInt32(image.Get(PdfName.BITSPERCOMPONENT).ToString());
            string  subtype          = image.Get(PdfName.SUBTYPE).ToString();
            int     height           = Convert.ToInt32(image.Get(PdfName.HEIGHT).ToString());
            int     length           = Convert.ToInt32(image.Get(PdfName.LENGTH).ToString());
            string  colorSpace       = image.Get(PdfName.COLORSPACE).ToString();

            /* It appears to be safe to assume that when filter == null, PdfImageObject
             * does not know how to decode the image to a System.Drawing.Image.
             *
             * Uncomment the code above to verify, but when I've seen this happen,
             * width, height and bits per component all equal zero as well. */
            //if (filter != null)
            //{
            Image drawingImage = image.GetDrawingImage();

            string extension = PdfImageObject.ImageBytesType.JPG.FileExtension;

            //if (filter == PdfName.DCTDECODE)
            //{
            //    extension += PdfImageObject.ImageBytesType.JPG.FileExtension;
            //}
            //else if (filter == PdfName.JPXDECODE)
            //{
            //    extension += PdfImageObject.ImageBytesType.JP2.FileExtension;
            //}
            //else if (filter == PdfName.FLATEDECODE)
            //{
            //    extension += PdfImageObject.ImageBytesType.PNG.FileExtension;
            //}
            //else if (filter == PdfName.LZWDECODE)
            //{
            //    extension += PdfImageObject.ImageBytesType.CCITT.FileExtension;
            //}

            /* Rather than struggle with the image stream and try to figure out how to handle
             * BitMapData scan lines in various formats (like virtually every sample I've found
             * online), use the PdfImageObject.GetDrawingImage() method, which does the work for us. */
            try
            {
                var pages = Program.NumberOfPagesPdf(Program.FilePhth);
                this.Images.Add(drawingImage, extension);
                string filename = @"C:\Images\" + pages + "\\";
                bool   exists   = System.IO.Directory.Exists(filename);
                PdfImageExtractor.increment++;
                if (!exists)
                {
                    System.IO.Directory.CreateDirectory(filename);
                }

                if (PdfImageExtractor.increment <= pages)
                {
                    string       fullName2 = filename + "im" + PdfImageExtractor.increment + ".JPG";
                    byte[]       byteArray = Encoding.UTF8.GetBytes(fullName2);
                    MemoryStream stream    = new MemoryStream();
                    drawingImage.Save(stream, drawingImage.RawFormat);
                    drawingImage.Save(fullName2, ImageFormat.Gif);
                    if (Program.invoice.images1.Any(m => m.ImageName == fullName2))
                    {
                    }
                    else
                    {
                        //sparar bilden till modellen
                        Program.invoice.images1.Add(new Models.Images()
                        {
                            ImageName = fullName2,

                            ImageData = stream.ToArray()
                        });
                    }
                }
            }
            catch (IOException e)
            {
                Console.WriteLine(e);
            }
        }
示例#9
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();
                }
            }
        }