pdf导出成图片
参考:
C# Pdf转图片通过(PdfiumViewer或O2S.Components.PDFRender4NET)实现
C# PDF转图片(JPG,Png)
实现:
using PdfiumViewer;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace PdfDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void selectPdf_Click(object sender, RoutedEventArgs e)
{
var openFileDialog = new Microsoft.Win32.OpenFileDialog()
{
Filter = "pdf文件 (*.pdf;*.*)|*.pdf;*.*",
Multiselect = true,
CheckFileExists = true,
CheckPathExists = true,
Title = "选择pdf",
};
var result = openFileDialog.ShowDialog();
var selectFiles = new List<string>();
if (result == true)
{
if (openFileDialog.FileNames != null && openFileDialog.FileNames.Any())
{
foreach (var fullPath in openFileDialog.FileNames)
{
var directoryPath = Path.GetDirectoryName(fullPath);
await PdfToImageConverter.PdfToPic(fullPath, directoryPath, System.Drawing.Imaging.ImageFormat.Jpeg);
MessageBox.Show("转换完成");
}
}
}
else
{
}
}
}
public class PdfToImageConverter
{
public static async Task PdfConvertToPic(string inFilePath, string outFileDir, System.Drawing.Imaging.ImageFormat format, int dpi = 300)
{
if (string.IsNullOrWhiteSpace(inFilePath))
{
throw new System.ArgumentNullException();
}
if (!File.Exists(inFilePath))
{
throw new FileNotFoundException();
}
if (!Directory.Exists(outFileDir))
{
Directory.CreateDirectory(outFileDir);
}
var inFileName = Path.GetFileNameWithoutExtension(inFilePath);
using (var document = PdfDocument.Load(inFilePath))
{
var pageCount = document.PageCount;
List<Task> tasks = new List<Task>();
for (int i = 0; i < pageCount; i++)
{
var ii = i;
tasks.Add(Task.Run(()=>
{
string outFile = Path.Combine(outFileDir, $"{inFileName}{ii + 1}.{format}");
using (var image = document.Render(ii, dpi, dpi, PdfRenderFlags.CorrectFromDpi))
{
var encoder = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
.First(c => c.FormatID == format.Guid);
var encParams = new System.Drawing.Imaging.EncoderParameters(1);
encParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, 10L);
image.Save(outFile, encoder, encParams);
}
}));
}
await Task.WhenAll(tasks.ToArray());
}
}
public static async Task PdfToPic(string inFilePath, string outFileDir, System.Drawing.Imaging.ImageFormat format, int dpi = 300)
{
if (string.IsNullOrWhiteSpace(inFilePath))
{
throw new System.ArgumentNullException();
}
if (!File.Exists(inFilePath))
{
throw new FileNotFoundException();
}
if (!Directory.Exists(outFileDir))
{
Directory.CreateDirectory(outFileDir);
}
var inFileName = Path.GetFileNameWithoutExtension(inFilePath);
using (var document = PdfDocument.Load(inFilePath))
{
var pageCount = document.PageCount;
var pageSizes = document.PageSizes;
List<Task> tasks = new List<Task>();
for (int i = 0; i < pageCount; i++)
{
var currentIndex = i;
tasks.Add(Task.Run(() =>
{
System.Drawing.Size size = new System.Drawing.Size();
size.Height = (int)pageSizes[currentIndex].Height;
size.Width = (int)pageSizes[currentIndex].Width;
string outFile = Path.Combine(outFileDir, $"{inFileName}{currentIndex + 1}.{format}");
using (var stream = new FileStream(outFile, FileMode.Create))
{
using (var image = document.Render(currentIndex, size.Width, size.Height, dpi, dpi, PdfRenderFlags.CorrectFromDpi))
{
image.Save(stream, format);
}
}
}));
}
await Task.WhenAll(tasks.ToArray());
}
}
}
}
Demo下载
Over!!!

浙公网安备 33010602011771号