C# pdf转png图片
写作背景
最近有朋友问我有没有pdf转jpg或者png的工具,发他一个,网上查了好多资料最后发现大部分都是收费项目。好在咱是程序员,没有咱就手动免费撸一个。最后实现了完美转换。
开发工具:vs2019
.netframework版本:4.5.2
程序依赖项:
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="PdfiumViewer" version="2.13.0.0" targetFramework="net452" /> <package id="PdfiumViewer.Native.x86.v8-xfa" version="2018.4.8.256" targetFramework="net452" /> </packages>
程序代码
using PdfiumViewer; using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace PdfConverter { class Program { static void Main(string[] args) { var path = AppDomain.CurrentDomain.BaseDirectory ; var helper = new PdfHelper(); helper.PdfToPic(path + "input\\1.pdf", path + "output\\", ImageFormat.Png); Console.WriteLine("转换完成."); } } class PdfHelper { /// <summary> /// <param name="filePath">pdf文件路径</param> /// <param name="outFilePath">picture输出文件路径</param> /// <param name="image">文件格式:Jpeg (转换后文件格式,如:Jpeg,Png等)</param> /// </summary> public void PdfToPic(string filePath, string outFilePath, ImageFormat image) { var pdf = PdfDocument.Load(filePath); var pdfpage = pdf.PageCount; var pagesizes = pdf.PageSizes; outFilePath = $"{outFilePath}\\{DateTime.Now.ToString("yyyyMMdd-HHmmss")}"; 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; //可以把".jpg"写成其他形式 RenderPage(filePath, i, size, picPath); string outFile = $"{outFilePath}({i}).{image}"; RenderPage(filePath, i, size, outFile, image); } } /// <summary> /// 渲染图片 /// </summary> /// <param name="pdfPath"></param> /// <param name="pageNumber"></param> /// <param name="size"></param> /// <param name="outputPath"></param> /// <param name="mat"></param> /// <param name="dpi"></param> private void RenderPage(string pdfPath, int pageNumber, System.Drawing.Size size, string outputPath, ImageFormat mat, int dpi = 300) { 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, mat); } /// <summary> /// 根据页数转换图片 /// </summary> /// <param name="pageNumber"></param> /// <param name="size"></param> /// <param name="document"></param> /// <param name="dpi"></param> /// <returns></returns> private static System.Drawing.Image GetPageImage(int pageNumber, Size size, PdfDocument document, int dpi) { return document.Render(pageNumber - 1, size.Width, size.Height, dpi, dpi, PdfRenderFlags.CorrectFromDpi); } } }
注释:
- PdfRenderFlags.Annotations:设置是否要渲染注释
- PdfRenderFlags.CorrectFromDpi:DPI的正确高度/宽度。更正DPI=8192
- 参数都设置为:PdfRenderFlags.CorrectFromDpi转换picture文件像素就是最合适的了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)