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
                });
            }
Esempio n. 2
0
        public virtual void RenderImage(ImageRenderInfo renderInfo)
        {
            IList <Rectangle> areasToBeCleaned = GetImageAreasToBeCleaned(renderInfo);

            if (areasToBeCleaned == null)
            {
                chunks.Add(new PdfCleanUpContentChunk.Image(false, null));
            }
            else
            {
                PdfImageObject pdfImage   = renderInfo.GetImage();
                byte[]         imageBytes = ProcessImage(pdfImage.GetImageAsBytes(), areasToBeCleaned);

                if (renderInfo.GetRef() == null && pdfImage != null)   // true => inline image
                {
                    PdfDictionary dict      = pdfImage.GetDictionary();
                    PdfObject     imageMask = dict.Get(PdfName.IMAGEMASK);
                    Image         image     = Image.GetInstance(imageBytes);

                    if (imageMask == null)
                    {
                        imageMask = dict.Get(PdfName.IM);
                    }

                    if (imageMask != null && imageMask.Equals(PdfBoolean.PDFTRUE))
                    {
                        image.MakeMask();
                    }

                    PdfContentByte canvas = Context.Canvas;
                    canvas.AddImage(image, 1, 0, 0, 1, 0, 0, true);
                }
                else if (pdfImage != null && imageBytes != pdfImage.GetImageAsBytes())
                {
                    chunks.Add(new PdfCleanUpContentChunk.Image(true, imageBytes));
                }
            }
        }