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!!!

posted @ 2024-09-29 15:12  BigBosscyb  阅读(3)  评论(0)    收藏  举报