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文件像素就是最合适的了。
posted @   星火燎猿*  阅读(237)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示