public static List <System.Drawing.Image> ExtractImagesFromPDF(String PDFSourcePath) { List <System.Drawing.Image> ImgList = new List <System.Drawing.Image>(); iTextSharp.text.pdf.RandomAccessFileOrArray RAFObj = null; iTextSharp.text.pdf.PdfReader PDFReaderObj = null; iTextSharp.text.pdf.PdfObject PDFObj = null; iTextSharp.text.pdf.PdfStream PDFStremObj = null; try { RAFObj = new iTextSharp.text.pdf.RandomAccessFileOrArray(PDFSourcePath); PDFReaderObj = new iTextSharp.text.pdf.PdfReader(RAFObj, null); for (int i = 0; i <= PDFReaderObj.XrefSize - 1; 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(); ImgList.Add(ImgPDF); } catch (Exception) { } } } } PDFReaderObj.Close(); } catch (Exception ex) { throw new Exception(ex.Message); } return(ImgList); }
private static IEnumerable <byte[]> GetImagesFromPdfPage(PdfReader pdf, int pageNumber) { var imagesBytes = new List <byte[]>(); var page = pdf.GetPageN(pageNumber); var res = (PdfDictionary)PdfReader.GetPdfObject(page.Get(PdfName.RESOURCES)); var xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT)); if (xobj == null) { return(null); } foreach (var name in xobj.Keys) { var obj = xobj.Get(name); if (!obj.IsIndirect()) { continue; } var tg = (PdfDictionary)PdfReader.GetPdfObject(obj); var type = (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE)); if (!type.Equals(PdfName.IMAGE)) { continue; } var xrefIndex = ((PRIndirectReference)obj).Number; var pdfImage = new iTextSharp.text.pdf.parser.PdfImageObject((PRStream)pdf.GetPdfObject(xrefIndex)); var img = pdfImage.GetDrawingImage(); var ms = new MemoryStream(); var myImageCodecInfo = GetEncoderInfo("image/jpeg"); var myEncoder = Encoder.Quality; var myEncoderParameters = new EncoderParameters(1); var myEncoderParameter = new EncoderParameter(myEncoder, 75L); myEncoderParameters.Param[0] = myEncoderParameter; img.Save(ms, myImageCodecInfo, myEncoderParameters); // img.Save(ms, ImageFormat.Jpeg); ms.Position = 0; imagesBytes.Add(ms.ToArray()); } return(imagesBytes); }
public IList <System.Drawing.Image> GetImagesFromPdf(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(GetImagesFromPdf(tg, doc)); } } } } return(images); }
public void SavePart(string srcFile, string dstFile, int startPage, int endPage) { PdfReader pdfReader = null; try { Cursor.Current = Cursors.WaitCursor; pdfReader = new PdfReader(srcFile); pdfReader.RemoveUnusedObjects(); if (pdfReader.NumberOfPages == 0) { throw new Exception("В документе отсутствуют страницы. Операция сохранения невозможна!"); } startPage = (startPage <= 0 || startPage > pdfReader.NumberOfPages) ? 1 : startPage; endPage = (endPage <= 0 || endPage <startPage || endPage> pdfReader.NumberOfPages) ? pdfReader.NumberOfPages : endPage; pdfReader.SelectPages(startPage.ToString() + "-" + endPage.ToString()); using (var file_stream = new FileStream(dstFile, FileMode.Create, FileAccess.Write, FileShare.None)) using (var stamper = new PdfStamper(pdfReader, file_stream)) { stamper.SetFullCompression(); for (int numberPage = startPage; numberPage <= endPage; numberPage++) { if (numberPage <= 0 || numberPage > pdfReader.NumberOfPages) { continue; } PdfDictionary page = pdfReader.GetPageN(numberPage); var resources = (PdfDictionary)PdfReader.GetPdfObject(page.Get(PdfName.RESOURCES)); var xobject = (PdfDictionary)PdfReader.GetPdfObject(resources.Get(PdfName.XOBJECT)); if (xobject != null) { foreach (PdfName pdname in xobject.Keys) { PdfObject obj = xobject.Get(pdname); if (obj.IsIndirect()) { var tg = (PdfDictionary)PdfReader.GetPdfObject(obj); //resolve indirect reference var subType = (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE)); if (PdfName.IMAGE.Equals(subType)) { int xrefIndex = ((PRIndirectReference)obj).Number; PdfObject imgPdfObj = pdfReader.GetPdfObject(xrefIndex); var imgPdfStream = (PdfStream)imgPdfObj; var imgPRStream = (PRStream)imgPdfStream; byte[] bytes = PdfReader.GetStreamBytesRaw(imgPRStream); if (bytes != null && bytes.Length > 0) { try { var pdfImage = new iTextSharp.text.pdf.parser.PdfImageObject(imgPRStream); Image img = pdfImage.GetDrawingImage(); if (img != null) { var filter = (PdfName)pdfImage.Get(PdfName.FILTER); if (filter != null) { continue; } System.Drawing.Imaging.ImageFormat format; byte[] updatedImgBytes = Controls.PdfViewControl.PDFView.ConvertImageToBytes(img, 75, out format); iTextSharp.text.Image compressedImage = iTextSharp.text.Image.GetInstance(updatedImgBytes); if (format == System.Drawing.Imaging.ImageFormat.Png) { compressedImage.Deflated = true; } PdfReader.KillIndirect(obj); stamper.Writer.AddDirectImageSimple(compressedImage, (PRIndirectReference)obj); } } catch (Exception e) { Console.WriteLine(e.ToString()); continue; } } } } } } } stamper.Close(); } } finally { if (pdfReader != null) { pdfReader.Close(); } Cursor.Current = Cursors.Default; } }