1. 程式人生 > 其它 >C# pdf轉圖片

C# pdf轉圖片

方法一:

引用:O2S.Components.PDFRender4NET.dll

  /// <summary>
    /// PDF文件所有頁全部轉換為圖片
    /// </summary>
    /// <param name="pdfInputPath">PDF檔案流</param>
    /// <param name="imageOutputPath">圖片輸出路徑</param>
    /// <param name="imageName">生成圖片的名字</param>
    /// <param name="imageFormat">設定所需圖片格式</param>
    /// <param name="definition">設定圖片的清晰度,數字越大越清晰</param>
    public static void ConvertAllPDF2Images(string pdfStream, string imageOutputPath, string imageName, ImageFormat imageFormat, Definition definition)
    {
        PDFFile pdfFile = PDFFile.Open(pdfStream);
        int startPageNum = 1;
        int endPageNum = pdfFile.PageCount;
        //  var bitMap = new Bitmap[endPageNum];
        for (int i = startPageNum; i <= endPageNum; i++)
        {
            try
            {
                Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);

                int canKao = pageImage.Width > pageImage.Height ? pageImage.Height : pageImage.Width;
                int newHeight = canKao > 1080 ? pageImage.Height / 2 : pageImage.Height;
                int newWidth = canKao > 1080 ? pageImage.Width / 2 : pageImage.Width;
                Bitmap newPageImage = new Bitmap(newWidth, newHeight);

                Graphics g = Graphics.FromImage(newPageImage);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

                g.DrawImage(pageImage, new Rectangle(0, 0, newWidth, newHeight),
                new Rectangle(0, 0, pageImage.Width, pageImage.Height), GraphicsUnit.Pixel);
                newPageImage.Save(imageOutputPath + imageName + "." + imageFormat);//+ i.ToString() imageFormat
                g.Dispose();
                newPageImage.Dispose();
                pageImage.Dispose();
            }
            catch (Exception ex)
            {
                string ss = ex.ToString();
            }
        }
        //合併圖片
          //var mergerImg = MergerImg(bitMap);
        //儲存圖片
        // mergerImg.Save(imageOutputPath, imageFormat);
        pdfFile.Dispose();
    }
/// <summary>
    /// 轉換的圖片清晰度,1最不清醒,10最清晰
    /// </summary>
    public enum Definition
    {
        One = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10
    }


  

方法二:

引用:1.PdfiumViewer.dll

2.pdfium.dll X86和pdfium.dll X64兩個補丁

using System;
using System.Drawing;
using System.Drawing.Imaging; using System.IO; using PdfiumViewer; public class PDFChangeImage { #region 獲取PDF頁數 /// <summary> /// 獲取PDF頁數 /// </summary> /// <param name="pdfpath">PDF路徑</param> /// <returns></returns> public int PDFpage(string pdfpath) {
var pdf = PdfDocument.Load(pdfpath); //pdf頁數 int pdfpage = pdf.PageCount; return pdfpage; } #endregion #region PDF轉圖片 /// <summary> /// PDF轉圖片 /// </summary> /// <param name="pdfpath">PDF路徑</param> /// <param name="imagepath">圖片儲存路徑</param> /// <param name="imageFormat">圖片格式</param> /// <param name="imageName">圖片名稱</param> /// <param name="page">PDF當前頁</param> /// <returns></returns> public void PDFChangeToImage(string pdfpath, string imagepath, ImageFormat imageFormat, string imageName, int page, int dpi) { try { var pdf = PdfDocument.Load(pdfpath); //pdf頁數 var pdfpage = pdf.PageCount; //pdf大小 var pagesizes = pdf.PageSizes; if (pdfpage >= page) { Size size = new Size(); size.Height = (int)pagesizes[page - 1].Height; size.Width = (int)pagesizes[page - 1].Width; string imagepathName = imagepath + "\\" + imageName + "." + imageFormat; RenderPage(pdf, page, size, imagepathName, imageFormat, dpi); } } catch (Exception) { throw; } } /// <summary> /// 得到路徑下檔案的大小 MB /// </summary> /// <param name="path"></param> /// <returns></returns> public double getImageSize(string path) { FileInfo fileInfo = new FileInfo(path); double length = Convert.ToDouble(fileInfo.Length); double Size = length / 1024 / 1024; return Size; } /// <summary> /// /// </summary> /// <param name="document">PDF檔案</param> /// <param name="pageNumber">PDF當前頁</param> /// <param name="size">PDF大小</param> /// <param name="outputPath">儲存路徑</param> /// <param name="imageFormat">圖片型別</param> /// <param name="dpi">dpi</param> public void RenderPage(PdfDocument document, int pageNumber, System.Drawing.Size size, string outputPath, ImageFormat imageFormat, int dpi) { //using (var document = PdfDocument.Load(pdfPath)) using (var stream = new FileStream(outputPath, FileMode.Create)) using (var image = GetPageImage(pageNumber, size, document, dpi)) { image.Save(stream, imageFormat); } } /// <summary> /// 生成圖片 /// </summary> /// <param name="pageNumber">pdf檔案張數</param> /// <param name="size">pdf檔案尺寸</param> /// <param name="document">pdf檔案位置</param> /// <param name="dpi"></param> /// <returns></returns> private System.Drawing.Image GetPageImage(int pageNumber, Size size, PdfiumViewer.PdfDocument document, int dpi) { return document.Render(pageNumber - 1, size.Width, size.Height, dpi, dpi, PdfRenderFlags.CorrectFromDpi); } #endregion }