C# pdf 轉成圖片 方法之一


在開發過程中遇到的: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");
            }
        }
    }

一般會出現這個問題:

解決辦法:找到程序屬性,更改平台目標即可

 

 以上內容如有侵權:請聯系作者刪除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM