public virtual void RenderImage(ImageRenderInfo renderInfo) { IList<Rectangle> areasToBeCleaned = GetImageAreasToBeCleaned(renderInfo); if (areasToBeCleaned == null || newClippingPath.IsEmpty()) { 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)); } } }
// --------------------------------------------------------------------------- /** * @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 } }