// --------------------------------------------------------------------------- /** * @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); //} }
// --------------------------------------------------------------------------- /** * @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 } }
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 { } }
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++; }
/// <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(); } } }
// --------------------------------------------------------------------------- /** * @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()); }