public override void Process(PdfFileParserData data) { data.WFState.Value = WFState.WFStateFail; Dictionary <String, byte[]> files = new Dictionary <String, byte[]>(); PdfReader reader = new PdfReader(data.DocumentToProcess); PdfReaderContentParser parser = new PdfReaderContentParser(reader); MyImageRenderListener listener = new MyImageRenderListener(); for (int i = 1; i <= reader.NumberOfPages; i++) { parser.ProcessContent(i, listener); } for (int i = 0; i < listener.Images.Count; ++i) { string filedir = string.Format("{0}\\{1}", Path.GetDirectoryName(data.DocumentToProcess), WFUtilities.GetNextDirectoryNumber(Path.GetDirectoryName(data.DocumentToProcess))); if (!Directory.Exists(filedir)) { Directory.CreateDirectory(filedir); } if (Directory.Exists(filedir)) { using (FileStream fs = new FileStream(string.Format("{0}\\{1}", filedir, listener.ImageNames[i]), FileMode.Create, FileAccess.Write)) { fs.Write(listener.Images[i], 0, listener.Images[i].Length); } data.OutputDocuments.Add(string.Format("{0}\\{1}", filedir, listener.ImageNames[i])); } } data.WFState.Value = KRSrcWorkflow.WFState.WFStateSuccess; }
private static void Main(string[] args) { var pdfPath = "E:\\Embryo_Omics\\pdfExtract\\Binder1.pdf"; var outputPath = "E:\\Embryo_Omics\\SingleSection_OldGrant\\OutTest\\Pngs"; PdfReader pdf = new PdfReader(pdfPath); PdfReaderContentParser parser = new PdfReaderContentParser(pdf); MyImageRenderListener listener = new MyImageRenderListener(); for (int i = 1; i <= pdf.NumberOfPages; i++) { parser.ProcessContent(i, listener); //Runs MyImageRenderListener below } var imgCount = listener.Images.Count; for (int i = 0; i < imgCount; i++) { var image = listener.Images[i]; var ext = listener.ImageExt[i]; var name = listener.ImageNames[i]; using (MemoryStream ms = new MemoryStream(image)) { using (System.Drawing.Image img = System.Drawing.Image.FromStream(ms)) { img.Save(String.Format("{0}\\{1}.png", outputPath, name), ImageFormat.Png); } } } }
public PdfImageObject extractImage(String signatureName) { MyImageRenderListener listener = new MyImageRenderListener(); PdfDictionary sigFieldDic = reader.AcroFields.GetFieldItem(signatureName).GetMerged(0); PdfDictionary appearancesDic = sigFieldDic.GetAsDict(PdfName.AP); PdfStream normalAppearance = appearancesDic.GetAsStream(PdfName.N); PdfDictionary resourcesDic = normalAppearance.GetAsDict(PdfName.RESOURCES); PdfContentStreamProcessor processor = new PdfContentStreamProcessor(listener); processor.ProcessContent(ContentByteUtils.GetContentBytesFromContentObject(normalAppearance), resourcesDic); return(listener.image); }