1. 程式人生 > >C# pdf 轉成圖片 方法之一

C# pdf 轉成圖片 方法之一

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 轉成圖片 方法之一