0
点赞
收藏
分享

微信扫一扫

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文件像素就是最合适的了。


举报

相关推荐

0 条评论