C# pdf 轉成圖片 方法之一
阿新 • • 發佈:2019-04-16
erp har 出現 enc 版本 pat 問題: pro ext
在開發過程中遇到的:pdf文件中包含文字、表格、圖片等,需要將圖片取出來存入本地,如何操作呢?
在面向百度編程的過程中,發現大部分東西要麽要錢,要麽就存在各種bug等,所以.....推薦使用iTextSharp 操作pdf
以下就是整個操作過程:
/// <summary> /// 編寫提取圖片的方法,代碼如下: /// </summary> /// <param name="pdfFile"></param> public static void ExtractImage(string pdfFile) { PdfReader pdfReader= new PdfReader(pdfFile); for (int pageNumber = 1; pageNumber <= pdfReader.NumberOfPages; pageNumber++) { PdfReader pdf = new PdfReader(pdfFile); PdfDictionary pg = pdf.GetPageN(pageNumber); PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES)); PdfDictionary xobj= (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT)); try { foreach (PdfName name in xobj.Keys) { PdfObject obj = xobj.Get(name); if (obj.IsIndirect()) { PdfDictionary tg= (PdfDictionary)PdfReader.GetPdfObject(obj); string width = tg.Get(PdfName.WIDTH).ToString(); string height = tg.Get(PdfName.HEIGHT).ToString(); //bug 出現位置:未將對象引用.... ImageRenderInfo imgRI = ImageRenderInfo.CreateForXObject(new GraphicsState(), (PRIndirectReference)obj, tg); RenderImage(imgRI); } } } catch (Exception ex) { Console.WriteLine(ex); continue; } } }
調用過程:
public ActionResult Index() { string path = @"C:\Users\Administrator\Desktop\20190415164629.pdf"; Pdftoimg.ExtractImage(path); return View(); }
特別註意:
1.必須確保path 的路徑指定的地方有pdf文件
2.在NuGet中拉取的最新的包可能用不了:建議使用穩定版本中的穩定版本
如果是在控制臺應用程序中:則可以使用PdfiumViewer
public class PdfiumViewerTool { /// <summary> /// 將PDF轉換為圖片 /// </summary> /// <param name="pdfPath">pdf文件位置</param> /// <param name="pageNumber">pdf文件張數</param> /// <param name="size">pdf文件尺寸</param> /// <param name="outputPath">輸出圖片位置與名稱</param> public void RenderPage(string pdfPath, int pageNumber, System.Drawing.Size size, string outputPath, int dpi = 300) { using (var document = PdfiumViewer.PdfDocument.Load(pdfPath)) using (var stream = new FileStream(outputPath, FileMode.Create)) using (var image = GetPageImage(pageNumber, size, document, dpi)) { image.Save(stream, ImageFormat.Jpeg); } } private static Image GetPageImage(int pageNumber, Size size, PdfiumViewer.PdfDocument document, int dpi) { return document.Render(pageNumber - 1, size.Width, size.Height, dpi, dpi, PdfRenderFlags.Annotations); } }
調用:
class Program { static void Main(string[] args) { string path = @"C:/Users/Administrator/Desktop/20190415164629.pdf"; var pdf = PdfiumViewer.PdfDocument.Load(path); var pdfpage = pdf.PageCount; var pagesizes = pdf.PageSizes; PdfiumViewerTool p2p = new PdfiumViewerTool(); for (int i = 1; i <= pdfpage; i++) { Size size = new Size(); size.Height = (int)pagesizes[(i - 1)].Height; size.Width = (int)pagesizes[(i - 1)].Width; p2p.RenderPage(path, i, size, @"C:\Users\Administrator\Desktop\" + i + @".jpg"); } } }
一般會出現這個問題:
解決辦法:找到程序屬性,更改平臺目標即可
以上內容如有侵權:請聯系作者刪除
C# pdf 轉成圖片 方法之一