C# pdf轉圖片
阿新 • • 發佈:2021-12-22
方法一:
引用: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 }