市面上有不少能够将PDF转换为图片的第三方dll,但是它们要么收费,要么免费带水印,或者需要先安装软件才能使用(比如Acrobat或者Ghostscript),那么有没有更好的方法呢,答案是有的。
首先我们需要导入两个nuget包,导入语句如下:
Install-Package PdfiumViewer -Version 2.13.0
Install-Package ImageResizer.Plugins.PdfiumRenderer.Pdfium.Dll -Version 1.0.1
PDF转图片类:
class PdfToPicture
{
/// <summary>
/// 将PDF转换为图片
/// </summary>
/// <param name="pdfPath">pdf文件位置</param>
/// <param name="pageNumber">pdf文件张数</param>
/// <param name="size">pdf文件尺寸</param>
/// <param name="outputPath">输出图片位置与名称</param>
public void RenderPage(string pdfPath, int pageNumber, System.Drawing.Size size, string outputPath, int dpi = 300)
{
using (var document = PdfiumViewer.PdfDocument.Load(pdfPath))
using (var stream = new FileStream(outputPath, FileMode.Create))
using (var image = GetPageImage(pageNumber, size, document, dpi))
{
image.Save(stream, ImageFormat.Jpeg);
}
}
private static Image GetPageImage(int pageNumber, Size size, PdfiumViewer.PdfDocument document, int dpi)
{
return document.Render(pageNumber - 1, size.Width, size.Height, dpi, dpi, PdfRenderFlags.Annotations);
}
}
调用示例:
static void Main(string[] args)
{
var pdf = PdfDocument.Load(@"E:\BBBBBPDF\sample.pdf");
var pdfpage = pdf.PageCount;
var pagesizes = pdf.PageSizes;
PdfToPicture p2p = new PdfToPicture();
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;
p2p.RenderPage(@"E:\BBBBBPDF\sample.pdf", i, size, @"E:\BBBBBPDF\sample" + i + @".jpg");
}
Console.WriteLine("Success");
Console.Read();
}
番外:如果仅导入了PdfiumViewer会发现程序并没有报错,但是一旦运行就会报依赖PDfium.dll的错