| 
				分享一个C#开发的Pdf转换工具,可以轻松实现转图片与word的转换					
					
					
						|  | 
							admin 2025年7月25日 12:53
								本文热度 1224 |  此工具可以轻松的实现将pdf文件按照顺序转换为图片文件与word文档,支持设置水印与清晰度操作也很简单,首先选择要转换的pdf文件,然后设置转换后保存的目录,提交等待即可。
1.工具截图           using Aspose.Pdf;using Aspose.Pdf.Generator;using Aspose.Pdf.Text;using System;using System.Collections.Concurrent;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button;
namespace WindowsPdfToImg{    public partial class qyx : Form    {        public qyx()        {
            InitializeComponent();        }
        private void label1_Click(object sender, EventArgs e)        {
        }
                                                private void button1_Click(object sender, EventArgs e)        {                        OpenFileDialog ofd = new OpenFileDialog();            ofd.Title = "选择文件";            ofd.Multiselect = true;            ofd.Filter = "(*.pdf)|*.pdf";
                        this.files.Text = "";            this.result.Text = "";            this.errorMsg.Text = "";
                        if (ofd.ShowDialog() == DialogResult.OK)            {
                foreach (var item in ofd.FileNames)                {                    this.files.Text += item + "\r\n";                }            }        }
        private void Form1_Load(object sender, EventArgs e)        {                        img_radio.Checked = true;
            this.files.AllowDrop = true;
        }
                                                private void selectDirectory_Click(object sender, EventArgs e)        {            FolderBrowserDialog fbd = new FolderBrowserDialog();            fbd.RootFolder = System.Environment.SpecialFolder.Desktop;            fbd.ShowNewFolderButton = true;            fbd.Description = "选择目录";
            if (fbd.ShowDialog() == DialogResult.OK)            {                this.directory.Text = fbd.SelectedPath.ToString();            }
        }
        private void label1_Click_1(object sender, EventArgs e)        {
        }
        private void files_TextChanged(object sender, EventArgs e)        {
        }
        private void files_DragEnter(object sender, DragEventArgs e)        {            e.Effect = DragDropEffects.All;        }
        private void files_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)        {            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);            foreach (string file in files)            {                if (Path.GetExtension(file) == ".pdf")                  {                    this.files.Text += file + "\r\n";                }            }        }
        private void label2_Click(object sender, EventArgs e)        {
        }
                                                private void submit_Click(object sender, EventArgs e)        {            var file = this.files.Text;
            result.Text = "";            errorMsg.Text = "";            pdf_text.Text = "";
            if (string.IsNullOrEmpty(file))            {                MessageBox.Show("请选择要转换的Pdf文件!");                return;            }
            var directory = this.directory.Text;            if (string.IsNullOrEmpty(directory))            {                MessageBox.Show("请设置保存目录!");                return;            }
            var timeRadio = this.timeRadio.Checked;            var wordsRadio = this.wordsRadio.Checked;
                                                            
                        var img_radio = this.img_radio.Checked;
                        var word_radio = this.word_radio.Checked;
            this.submit.Enabled = false;            this.btnSelect.Enabled = false;            this.selectDirectory.Enabled = false;
            var dateTimePicker1 = this.dateTimePicker1.Value;            var watermarkWord = this.watermarkWord.Text;
            var text = "";            if (timeRadio)            {                text = dateTimePicker1.ToString();            }            else if (wordsRadio)            {                text = watermarkWord;            }
                        var type = 0;
            if (img_radio)            {                type = 1;            }            else if (word_radio)            {                type = 2;            }
            foreach (var i in file.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries))            {                var m = new Files                {                    Path = i,                    Text = text,                    Directory = directory,                    Name = "",                    Type = type                };
                queue.Enqueue(m);            }
                        StartQueue();        }
        private void close_Click(object sender, EventArgs e)        {            Application.Exit();        }
        private void timeRadio_CheckedChanged(object sender, EventArgs e)        {
        }
        private void groupBox1_Enter(object sender, EventArgs e)        {
        }
        private void groupBox1_Enter_1(object sender, EventArgs e)        {
        }
                                                        public void CreatImg(string file, string text, string directory)        {            Stopwatch sw = new Stopwatch();            sw.Start();
            var qualityText = this.resolutionText.Text;            var quality = 80;
            var resolutionText = this.resolutionText.Text;            var reso = 80;
            if (!string.IsNullOrEmpty(qualityText))            {                quality = Convert.ToInt32(qualityText);
                if (quality >= 128) { quality = 128; }            }
            if (!string.IsNullOrEmpty(resolutionText))            {                reso = Convert.ToInt32(resolutionText);            }
            Directory.CreateDirectory(directory);
            string filename = System.IO.Path.GetFileName(file);            string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(file);
                        Directory.CreateDirectory(directory + "\\" + fileNameWithoutExtension);
                        var imageOutputDirPath = directory;
                        var resolution = new Aspose.Pdf.Devices.Resolution(reso);
                        var pdf = new Aspose.Pdf.Document(file);
                        var count = pdf.Pages.Count;            this.progressBar1.Value = 0;            this.progressBar1.Style = ProgressBarStyle.Blocks;            this.progressBar1.Maximum = count;            this.progressBar1.Minimum = 0;            this.progressBar1.MarqueeAnimationSpeed = 100;            this.progressBar1.Step = 1;            this.lbl_progress.Text = "0%";            this.lbl_progress.Refresh();
            this.Invoke(new Action(() =>            {                result.Text += $"文件{file}已经开始处理{DateTime.Now},";            }));
            Page testpage = pdf.Pages[1];                        TextStamp textStamp = new TextStamp(text);
                        textStamp.XIndent = (testpage.PageInfo.Width / 2) - 200;            textStamp.YIndent = (testpage.PageInfo.Height / 2);
                        textStamp.TextState.Font = FontRepository.FindFont("SimSun");            textStamp.TextState.FontSize = 40.0F;            textStamp.TextState.FontStyle = FontStyles.Italic;            textStamp.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Gray);            textStamp.Opacity = 50;
                        textStamp.setStampId(123456);
            
            Document doc = new Document();            Page page = doc.Pages.Add();
            try            {                var i = 0;                foreach (Aspose.Pdf.Page item in pdf.Pages)                {                    i++;
                    this.Invoke(new Action(() =>                    {                        pdf_text.Text = $"正在转换文件:《{filename}》,总共{count}页,当前第{i}页,还剩余{count - i}页";                    }));
                    var filename2 = imageOutputDirPath + "/" + fileNameWithoutExtension + "/" + i + ".jpeg";
                                        Aspose.Pdf.Image image = new Aspose.Pdf.Image();
                                        item.AddStamp(textStamp);
                    new Aspose.Pdf.Devices.JpegDevice(resolution, quality).Process(item, filename2);
                                                            image.File = filename2; 
                    System.Drawing.Image srcImage = System.Drawing.Image.FromFile(filename2);                    int h = srcImage.Height;                    int w = srcImage.Width;
                                        
                    page.PageInfo.Height = (h);                    page.PageInfo.Width = (w);                    page.PageInfo.Margin.Bottom = (0);                    page.PageInfo.Margin.Top = (0);                    page.PageInfo.Margin.Right = (0);                    page.PageInfo.Margin.Left = (0);
                                        page.Paragraphs.Add(image);
                                        this.progressBar1.PerformStep();                                        double dCount = count, dProg = this.progressBar1.Value;                    this.lbl_progress.Text = Math.Round((dProg / dCount) * 100).ToString() + "%";                }
                this.Invoke(new Action(() =>                {                    pdf_text.Text += $",新文件正在保存中...";                }));
                var newFileName = fileNameWithoutExtension + "__已处理.pdf";                doc.Save(imageOutputDirPath + "/" + newFileName);
                this.Invoke(new Action(() =>                {                    pdf_text.Text += $",新文件已经保存成功!";                }));
                sw.Stop();                this.Invoke(new Action(() =>                {                    result.Text += $"已经处理完成,总共{i}页,{DateTime.Now},耗时{Tools.RevertToTime(sw.ElapsedMilliseconds)}\r\n";                }));
            }            catch (Exception ex)            {                this.Invoke(new Action(() =>                {                    errorMsg.Text += $"文件{file}异常:{ex.ToString()}\r\n";                }));
                this.submit.Enabled = true;                this.btnSelect.Enabled = true;                this.selectDirectory.Enabled = true;            }
                                                            
            GC.Collect();        }
                                                public void CreatWordTest(string file, string directory)        {                        Stopwatch sw = new Stopwatch();            sw.Start();
                        Directory.CreateDirectory(directory);
            string filename = System.IO.Path.GetFileName(file);            string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(file);
                        Directory.CreateDirectory(directory + "\\" + fileNameWithoutExtension);
                        var wordOutputDirPath = directory;
            try            {                                var pdf = new Aspose.Pdf.Document(file);
                                var count = pdf.Pages.Count;                this.progressBar1.Value = 0;                this.progressBar1.Style = ProgressBarStyle.Blocks;                this.progressBar1.Maximum = count;                this.progressBar1.Minimum = 0;                this.progressBar1.MarqueeAnimationSpeed = 100;                this.progressBar1.Step = 1;                this.lbl_progress.Text = "0%";                this.lbl_progress.Refresh();
                this.Invoke(new Action(() =>                {                    result.Text += $"文件{file}已经开始处理{DateTime.Now},";                }));
                var filename2 = wordOutputDirPath + "/" + fileNameWithoutExtension + "/" + fileNameWithoutExtension + "_已转换.docx";
                                this.progressBar1.PerformStep();                                double dCount = count, dProg = this.progressBar1.Value;                this.lbl_progress.Text = Math.Round((dProg / dCount) * 100).ToString() + "%";
                                pdf.Save(filename2, SaveFormat.DocX);
                this.Invoke(new Action(() =>                {                    pdf_text.Text += $",新文件已经保存成功!";                }));
                sw.Stop();                this.Invoke(new Action(() =>                {                    result.Text += $"已经处理完成,{DateTime.Now},耗时{Tools.RevertToTime(sw.ElapsedMilliseconds)}\r\n";                }));            }            catch (Exception ex)            {
                this.Invoke(new Action(() =>                {                    errorMsg.Text += $"文件{file}异常:{ex.ToString()}\r\n";                }));
                this.submit.Enabled = true;                this.btnSelect.Enabled = true;                this.selectDirectory.Enabled = true;            }
            GC.Collect();
        }
                                                public void CreatWord(string file, string directory)        {                        Stopwatch sw = new Stopwatch();            sw.Start();
            try            {                                string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(file);                string outputDir = Path.Combine(directory, fileNameWithoutExtension);                Directory.CreateDirectory(outputDir);  
                                var wordOutputPath = Path.Combine(outputDir, $"{fileNameWithoutExtension}_已转换.docx");
                                var pdf = new Aspose.Pdf.Document(file);
                                var pageCount = pdf.Pages.Count;                this.progressBar1.Invoke(new Action(() =>                {                    this.progressBar1.Value = 0;                    this.progressBar1.Style = ProgressBarStyle.Blocks;                    this.progressBar1.Maximum = pageCount + 100;                     this.progressBar1.Minimum = 0;                    this.progressBar1.MarqueeAnimationSpeed = 100;                    this.progressBar1.Step = 1;                    this.lbl_progress.Text = "0%";                    this.lbl_progress.Refresh();                }));
                                this.Invoke(new Action(() =>                {                    result.Text += $"文件{file}已经开始处理{DateTime.Now},";                }));
                                int updateInterval = Math.Max(1, pageCount / 100);                for (int i = 1; i <= pageCount; i++)                {                                        if (i % updateInterval == 0)                    {                        this.progressBar1.Invoke(new Action(() =>                        {                            this.progressBar1.Value = i;                            double progressPercentage = (double)i / pageCount * 100;                            this.lbl_progress.Text = $"{Math.Round(progressPercentage)}%";                        }));                    }                }
                                this.progressBar1.Invoke(new Action(() =>                {                    this.progressBar1.Value = pageCount;                 }));
                                pdf.Save(wordOutputPath, SaveFormat.DocX);
                                for (int i = pageCount; i <= pageCount + 100; i++)                 {                    int progress = i;                    this.progressBar1.Invoke(new Action(() =>                    {                        this.progressBar1.Value = progress;                        double progressPercentage = (double)progress / (pageCount + 100) * 100;                        this.lbl_progress.Text = $"{Math.Round(progressPercentage)}%";                    }));
                                        Thread.Sleep(10);                }
                this.Invoke(new Action(() =>                {                    pdf_text.Text += $",新文件已经保存成功!";                }));
                                sw.Stop();                this.Invoke(new Action(() =>                {                    result.Text += $"已经处理完成,{DateTime.Now},耗时{Tools.RevertToTime(sw.ElapsedMilliseconds)}\r\n";                }));            }            catch (Exception ex)            {                this.Invoke(new Action(() =>                {                    errorMsg.Text += $"文件{file}异常:{ex.ToString()}\r\n";                }));            }            finally            {                                this.Invoke(new Action(() =>                {                    submit.Enabled = true;                    btnSelect.Enabled = true;                    selectDirectory.Enabled = true;                }));            }        }
        private void result_TextChanged(object sender, EventArgs e)        {
        }
        #region 队列相关        private static ConcurrentQueue<Files> queue = new ConcurrentQueue<Files>();        private static bool hasQueue = false; 
                                private void StartQueue()        {            if (hasQueue == false)            {
                hasQueue = true;                System.Threading.Tasks.Task.Run(() =>                {                    QueueEach_Pdf();                });            }        }
                                        public async void QueueEach_Pdf()        {            Stopwatch sw = new Stopwatch();            sw.Start();
            while (hasQueue)            {                if (queue.Count > 0)                {                    List<Files> list = new List<Files>();
                    try                    {                        this.Invoke(new Action(() =>                        {                            result.Text = $"文件处理开始,总共{queue.Count}个文件,当前时间{DateTime.Now}\r\n";                        }));
                        var count = queue.Count;                        for (int i = 0; i < count; i++)                        {                            Files item = new Files();                            bool dequeueSuccesful = false;                            dequeueSuccesful = queue.TryDequeue(out item);
                            if (dequeueSuccesful)                            {                                                                if (item.Type == 1)                                {                                    CreatImg(item.Path, item.Text, item.Directory);                                }                                else if (item.Type == 2)                                {                                    CreatWord(item.Path,  item.Directory);                                }
                            }                        }
                        sw.Stop();                        this.Invoke(new Action(() =>                        {                            result.Text += $"文件处理结束{DateTime.Now},耗时{Tools.RevertToTime(sw.ElapsedMilliseconds)}\r\n";                        }));
                        this.submit.Enabled = true;                        this.btnSelect.Enabled = true;                        this.selectDirectory.Enabled = true;                    }                    catch (Exception ex)                    {
                        this.Invoke(new Action(() =>                        {                            errorMsg.Text += $"队列执行异常:{ex.ToString()}\r\n";                        }));
                        this.submit.Enabled = true;                        this.btnSelect.Enabled = true;                        this.selectDirectory.Enabled = true;                    }                }            }        }
        #endregion
        private void files_DockChanged(object sender, EventArgs e)        {
        }
        private void label5_Click(object sender, EventArgs e)        {
        }
        private void progressBar1_Click(object sender, EventArgs e)        {
        }
        private void lbl_progress_Click(object sender, EventArgs e)        {
        }
        private void progressBar2_Click(object sender, EventArgs e)        {
        }
        private void textBox1_TextChanged(object sender, EventArgs e)        {
        }
                                                private void textBox1_KeyPress(object sender, KeyPressEventArgs e)        {                        if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8 &&          e.KeyChar != 1 && e.KeyChar != 3 && e.KeyChar != 22)            {                e.Handled = true;            }        }
        private void word_radio_CheckedChanged(object sender, EventArgs e)        {
        }
        private void wordsRadio_CheckedChanged(object sender, EventArgs e)        {
        }
        private void panel1_Paint(object sender, PaintEventArgs e)        {
        }    }}
 阅读原文:原文链接 该文章在 2025/7/25 14:55:05 编辑过
 |  |