//------------------------------------------------------------------------- private bool ExtractImages(String PDFSourcePath, Audit sourceAudit, out Exception exception) { //List<System.Drawing.Image> ImgList = new List<System.Drawing.Image>(); exception = null; iTextSharp.text.pdf.RandomAccessFileOrArray RAFObj = null; iTextSharp.text.pdf.PdfReader PDFReaderObj = null; iTextSharp.text.pdf.PdfObject PDFObj = null; iTextSharp.text.pdf.PdfStream PDFStremObj = null; int pageNumber = 0; bool ok = false; try { RAFObj = new iTextSharp.text.pdf.RandomAccessFileOrArray(PDFSourcePath); PDFReaderObj = new iTextSharp.text.pdf.PdfReader(RAFObj, null); for (int i = 0; i < PDFReaderObj.XrefSize; i++) { PDFObj = PDFReaderObj.GetPdfObject(i); if ((PDFObj != null) && PDFObj.IsStream()) { PDFStremObj = (iTextSharp.text.pdf.PdfStream)PDFObj; iTextSharp.text.pdf.PdfObject subtype = PDFStremObj.Get(iTextSharp.text.pdf.PdfName.SUBTYPE); if ((subtype != null) && subtype.ToString() == iTextSharp.text.pdf.PdfName.IMAGE.ToString()) { try { iTextSharp.text.pdf.parser.PdfImageObject PdfImageObj = new iTextSharp.text.pdf.parser.PdfImageObject((iTextSharp.text.pdf.PRStream)PDFStremObj); System.Drawing.Image ImgPDF = PdfImageObj.GetDrawingImage(); pageNumber++; if (pageNumber > PDFReaderObj.NumberOfPages) return false; } catch (Exception) { } } } } pageNumber = 0; PageCount = PDFReaderObj.NumberOfPages; for (int i = 0; i < PDFReaderObj.XrefSize; i++) { PDFObj = PDFReaderObj.GetPdfObject(i); if ((PDFObj != null) && PDFObj.IsStream()) { PDFStremObj = (iTextSharp.text.pdf.PdfStream)PDFObj; iTextSharp.text.pdf.PdfObject subtype = PDFStremObj.Get(iTextSharp.text.pdf.PdfName.SUBTYPE); if ((subtype != null) && subtype.ToString() == iTextSharp.text.pdf.PdfName.IMAGE.ToString()) { try { iTextSharp.text.pdf.parser.PdfImageObject PdfImageObj = new iTextSharp.text.pdf.parser.PdfImageObject((iTextSharp.text.pdf.PRStream)PDFStremObj); System.Drawing.Image ImgPDF = PdfImageObj.GetDrawingImage(); pageNumber++; //using (Bitmap bmp = new Bitmap(ImgPDF)) //{ // SaveFrameFiles(PDFSourcePath, sourceAudit, bmp, pageNumber, PageCount); try { SaveFrameFiles(PDFSourcePath, sourceAudit, (Bitmap)ImgPDF, pageNumber, PageCount); } catch (Exception) { ImgPDF.Dispose(); continue; } ImgPDF.Dispose(); ok = true; //} } catch (Exception) { } } } } return ok; } catch (Exception)// ex { //log.LogMessage(PDFSourcePath + " Page" + pageNumber.ToString() + " ", ex); return false; } finally { PDFReaderObj.Close(); PDFReaderObj.Dispose(); } }
private void TestFile(String filename, int page, String objectid) { PdfReader pdfReader = TestResourceUtils.GetResourceAsPdfReader(TEST_RESOURCES_PATH, filename); try { PdfDictionary resources = pdfReader.GetPageResources(page); PdfDictionary xobjects = resources.GetAsDict(PdfName.XOBJECT); PdfIndirectReference objRef = xobjects.GetAsIndirectObject(new PdfName(objectid)); if (objRef == null) throw new NullReferenceException("Reference " + objectid + " not found - Available keys are " + xobjects.Keys); PRStream stream = (PRStream)PdfReader.GetPdfObject(objRef); PdfDictionary colorSpaceDic = resources != null ? resources.GetAsDict(PdfName.COLORSPACE) : null; PdfImageObject img = new PdfImageObject(stream, colorSpaceDic); byte[] result = img.GetImageAsBytes(); Assert.NotNull(result); int zeroCount = 0; foreach (byte b in result) { if (b == 0) zeroCount++; } Assert.IsTrue(zeroCount > 0); } finally { pdfReader.Close(); } }
private void PrepareImageObject() { if (imageObject != null) { return; } PRStream stream = (PRStream)PdfReader.GetPdfObject(refi); imageObject = new PdfImageObject(stream); }
// --------------------------------------------------------------------------- /** * Manipulates a PDF file src with the byte array as result */ public byte[] ManipulatePdf(byte[] pdf) { PdfName key = new PdfName("ITXT_SpecialId"); PdfName value = new PdfName("123456789"); // Read the file PdfReader reader = new PdfReader(pdf); int n = reader.XrefSize; PdfObject pdfObject; PRStream prStream; // Look for image and manipulate image prStream for (int i = 0; i < n; i++) { pdfObject = reader.GetPdfObject(i); if (pdfObject == null || !pdfObject.IsStream()) continue; prStream = (PRStream) pdfObject; byte[] imageBytes; if (value.Equals(prStream.Get(key))) { PdfImageObject image = new PdfImageObject(prStream); using (System.Drawing.Image original = image.GetDrawingImage()) { if (original == null) continue; int width = (int)(original.Width * FACTOR); int height = (int)(original.Height * FACTOR); using (System.Drawing.Image thumb = new Bitmap(width, height) ) { using ( Graphics graphic = Graphics.FromImage(thumb) ) { graphic.DrawImage(original, 0, 0, width, height); using (MemoryStream ms = new MemoryStream()) { thumb.Save(ms, ImageFormat.Jpeg); imageBytes = ms.ToArray(); } } } prStream.Clear(); prStream.SetData(imageBytes, false, PRStream.NO_COMPRESSION); prStream.Put(PdfName.TYPE, PdfName.XOBJECT); prStream.Put(PdfName.SUBTYPE, PdfName.IMAGE); prStream.Put(key, value); prStream.Put(PdfName.FILTER, PdfName.DCTDECODE); prStream.Put(PdfName.WIDTH, new PdfNumber(width)); prStream.Put(PdfName.HEIGHT, new PdfNumber(height)); prStream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8)); prStream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB); } } } // Save altered PDF using (MemoryStream ms = new MemoryStream()) { using (PdfStamper stamper = new PdfStamper(reader, ms)) { } return ms.ToArray(); } }
private void PrepareImageObject() { if (imageObject != null) { return; } if (refi != null) { PRStream stream = (PRStream)PdfReader.GetPdfObject(refi); imageObject = new PdfImageObject(stream, colorSpaceDictionary); } else if (inlineImageInfo != null) { imageObject = new PdfImageObject(inlineImageInfo.ImageDictionary, inlineImageInfo.Samples, colorSpaceDictionary); } }
/// <summary> /// https://stackoverflow.com/questions/802269/extract-images-using-itextsharp /// </summary> private static IList <System.Drawing.Image> GetImagesFromPdfDict(PdfDictionary dict, PdfReader doc) { List <System.Drawing.Image> images = new List <System.Drawing.Image>(); PdfDictionary res = (PdfDictionary)(PdfReader.GetPdfObject(dict.Get(PdfName.RESOURCES))); PdfDictionary xobj = (PdfDictionary)(PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT))); if (xobj != null) { foreach (PdfName name in xobj.Keys) { PdfObject obj = xobj.Get(name); if (obj.IsIndirect()) { PdfDictionary tg = (PdfDictionary)(PdfReader.GetPdfObject(obj)); PdfName subtype = (PdfName)(PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE))); if (PdfName.IMAGE.Equals(subtype)) { int xrefIdx = ((PRIndirectReference)obj).Number; PdfObject pdfObj = doc.GetPdfObject(xrefIdx); PdfStream str = (PdfStream)(pdfObj); iTextSharp.text.pdf.parser.PdfImageObject pdfImage = new iTextSharp.text.pdf.parser.PdfImageObject((PRStream)str); System.Drawing.Image img = pdfImage.GetDrawingImage(); images.Add(img); } else if (PdfName.FORM.Equals(subtype) || PdfName.GROUP.Equals(subtype)) { images.AddRange(GetImagesFromPdfDict(tg, doc)); } } } } return(images); }
private void PrepareImageObject() { if (imageObject != null) return; if (refi != null){ PRStream stream = (PRStream)PdfReader.GetPdfObject(refi); imageObject = new PdfImageObject(stream, colorSpaceDictionary); } else if (inlineImageInfo != null){ imageObject = new PdfImageObject(inlineImageInfo.ImageDictionary, inlineImageInfo.Samples, colorSpaceDictionary); } }
/** * Create an ImageRenderInfo object based on inline image data. This is nowhere near completely thought through * and really just acts as a placeholder. * @param ctm the coordinate transformation matrix at the time the image is rendered * @param imageObject the image object representing the inline image * @return the ImageRenderInfo representing the rendered embedded image * @since 5.0.1 */ protected internal static ImageRenderInfo CreatedForEmbeddedImage(Matrix ctm, PdfImageObject imageObject) { ImageRenderInfo renderInfo = new ImageRenderInfo(ctm, null); renderInfo.imageObject = imageObject; return(renderInfo); }
/** * Create an ImageRenderInfo object based on inline image data. This is nowhere near completely thought through * and really just acts as a placeholder. * @param ctm the coordinate transformation matrix at the time the image is rendered * @param imageObject the image object representing the inline image * @return the ImageRenderInfo representing the rendered embedded image * @since 5.0.1 */ protected internal static ImageRenderInfo CreatedForEmbeddedImage(Matrix ctm, PdfImageObject imageObject){ ImageRenderInfo renderInfo = new ImageRenderInfo(ctm, null); renderInfo.imageObject = imageObject; return renderInfo; }
private void PrepareImageObject() { if (imageObject != null) return; PRStream stream = (PRStream)PdfReader.GetPdfObject(refi); imageObject = new PdfImageObject(stream); }
private Bitmap GetImagesFromPdfDict(PdfDictionary dict) { PdfDictionary res = (PdfDictionary)(PdfReader.GetPdfObject(dict.Get(PdfName.RESOURCES))); PdfDictionary xobj = (PdfDictionary)(PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT))); Bitmap bm = null; if (xobj != null) { foreach (PdfName name in xobj.Keys) { PdfObject obj = xobj.Get(name); if (obj.IsIndirect()) { PdfDictionary tg = (PdfDictionary)(PdfReader.GetPdfObject(obj)); PdfName subtype = (PdfName)(PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE))); if (PdfName.IMAGE.Equals(subtype)) { int xrefIdx = ((PRIndirectReference)obj).Number; PdfObject pdfObj = this.reader.GetPdfObject(xrefIdx); PRStream str = (PRStream)(pdfObj); PdfArray decode = tg.GetAsArray(PdfName.DECODE); int width = tg.GetAsNumber(PdfName.WIDTH).IntValue; int height = tg.GetAsNumber(PdfName.HEIGHT).IntValue; int bpc = tg.GetAsNumber(PdfName.BITSPERCOMPONENT).IntValue; var filter = tg.Get(PdfName.FILTER); if (filter.Equals(PdfName.FLATEDECODE)) { var imageBytes = PdfReader.GetStreamBytesRaw(str); var decodedBytes = PdfReader.FlateDecode(imageBytes); //decode the raw image var streamBytes = PdfReader.DecodePredictor(decodedBytes, str.GetAsDict(PdfName.DECODEPARMS)); //decode predict to filter the bytes var pixelFormat = PixelFormat.Format1bppIndexed; switch (bpc) //determine the BPC { case 1: pixelFormat = PixelFormat.Format1bppIndexed; break; case 8: pixelFormat = PixelFormat.Format8bppIndexed; break; case 24: pixelFormat = PixelFormat.Format24bppRgb; break; } bm = new Bitmap(width, height, pixelFormat); { var bmpData = bm.LockBits(new System.Drawing.Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, pixelFormat); var length = (int)Math.Ceiling(width * bpc / 8.0); for (int i = 0; i < height; i++) { int offset = i * length; int scanOffset = i * bmpData.Stride; Marshal.Copy(streamBytes, offset, new IntPtr(bmpData.Scan0.ToInt32() + scanOffset), length); } bm.UnlockBits(bmpData); } } else { iTextSharp.text.pdf.parser.PdfImageObject pdfImage = new iTextSharp.text.pdf.parser.PdfImageObject(str); bm = (System.Drawing.Bitmap)pdfImage.GetDrawingImage(); } int yDPI = bm.Height / 11; int xDPI = (bm.Width * 2) / 17; xDPI = Math.Abs(xDPI - 300) < 10 ? 300 : xDPI; yDPI = Math.Abs(yDPI - 300) < 10 ? 300 : yDPI; xDPI = Math.Abs(xDPI - 600) < 10 ? 600 : xDPI; yDPI = Math.Abs(yDPI - 600) < 10 ? 600 : yDPI; if (xDPI == yDPI) { bm.SetResolution(xDPI, yDPI); } else { } break; } else if (PdfName.FORM.Equals(subtype) || PdfName.GROUP.Equals(subtype)) { GetImagesFromPdfDict(tg); } } } } return(bm); }