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); } } }
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 }); }
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); } }
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); } }
/// <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(); } } }