抓紧收藏:winform编程精品干货内容-03制作pdf文件转图片(含源码)

这篇博客介绍了如何使用C#的Winform进行PDF转图片的编程,包括打开PDF、选择保存路径、设置进度条及转换核心代码。通过委托和线程更新进度条,确保程序流畅运行。转换完成后,会弹窗提示用户操作完成。
摘要由CSDN通过智能技术生成

winform编程其实是非常好入门的,如果你还是个小白,赶紧看看吧,现在小孩子都学编程了,你还在等什么呢?在等自己一毕业就失业吗?

话不多说了,直接上代码,看看吧。源码在最下面

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;
using System.IO;

namespace PDFTransformImage
{
    public partial class Form1 : Form
    {
        //委托就是用关键字delegate 来定义的,这里定义完了,在下面使用
        delegate void SetProgress(int value);
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 这个是打开要转换的PDF文件的按钮事件,我们在这个事件里写打开文件的代码
        /// 这里会用到打开文件对话框控件类
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpenPdf_Click(object sender, EventArgs e)
        {
            //第一步我们创建打开文件对话框
            var form = new OpenFileDialog();
            //设置限制打开的文件类型
            form.Filter = "PDF File (*.pdf)|*.pdf";
            //这个是让对话框打开以后,在下次打开时就直接显示你之前打开文件的位置了,
            //自动记录打开位置
            form.RestoreDirectory = true;
            //设置对话框的标题
            form.Title = "打开PDF文件";

            //第二步根据你打开的对话框进行判断,你是否选择文件了,
            //如果没有选择则释放掉对话框占有的资源,这里不是点了打开的话
            if (form.ShowDialog(this) != DialogResult.OK)
            {
                Dispose(); //释放掉占用资源
                return;//不再继续执行下面的程序了
            }
            //如果你选择了pdf文件并点了代开
            //这里就把你选的文件路径显示在名称为:txtPdfPath的文本框里里
            txtPdfPath.Text = form.FileName;
        }

        /// <summary>
        /// 这个是我们要选择把pdf转换后将图片存到哪里
        /// 这里我们会用到FolderBrowserDialog这个对话框(这是选择文件保存位置的)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSavePath_Click(object sender, EventArgs e)
        {
            //第一步我们也要先创建对话框的对象
            FolderBrowserDialog folder = new FolderBrowserDialog();
            //接下来还是要判断你是不是点了确定,如果你点了确定,就执行if大括号里面的代码
            if (folder.ShowDialog() == DialogResult.OK)
            {
                //将你选择的保存位置路径显示到名为:txtSavePath的文本框中
                txtSavePath.Text = folder.SelectedPath;//selected就是选择的意思
            }


        }
        /// <summary>
        /// 这个是我们的开始转换的按钮事件,当我们用鼠标单击这个按钮后就会执行这里的代码
        /// 并开始转换我们想要的图片,这是整个功能实现的核心,在实现前,我们需要通过vs工具
        /// 安装我们需要用到的外部功能包NuGet包。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStart_Click(object sender, EventArgs e)
        {
            //第一步先把要转换的PDF文件在后台进行打开,方法如下
            string strpdfpath = txtPdfPath.Text;
            var pdf = PdfiumViewer.PdfDocument.Load(strpdfpath);//告诉这个方法文件存在哪里它就会自动记载
            var pdfpage = pdf.PageCount;//读取pdf文件有多少页
            var pagesize = pdf.PageSizes;//读取pdf中的每一页

            //这个我们设置一下转换进度的提示条的最大值
            progressTransform.Maximum = pdfpage * 100;

            //这里我们用for循环,对每一页进行逐页读取并进行转换后存到我们选好的位置
            //关于for循环的用法,大家可以看看我在《10天学会C#面向对象编程中的介绍》
            for (int i = 0; i < pdfpage; i++)
            {
                //这里我们需要把每一页读取出来,用到一个Size的类,因为是要从pagesize中把页面对出来
                //每循环一次读出来的页面都不一样,所以要把创建对象的过程写到循环里,
                //这样才能获取到不同的页面信息
                Size size = new Size();
                size.Height =(int) pagesize[i].Height;//把页面的具体高度给读出来,这里我们需要强制转换一下类型
                size.Width =(int) pagesize[i].Width;//把页面的具体宽度给读出来,这里我们需要强制转换一下类型
                //读出页面的高度和宽度是为了作为图片的高度和宽度
                //下一步就是把我们对出来的页面存储成我们想要的图片,这里我存储成了jpg格式
                //大家也可以根据自己想要的修改成PNG等格式
                //这里我们会用到文件流类(FileStream),这里using是filestream对象用完后自动释放占用的资源
                using (var stream = new FileStream(txtSavePath.Text + "\\" + "pdf" + i + @".jpg",FileMode.Create))
                {
                    //这里是保存前进行相关的设置,如:宽度和高度等
                    using (var image = pdf.Render(i, size.Width, size.Height, PdfiumViewer.PdfRenderFlags.Annotations))
                    {
                        image.Save(stream,ImageFormat.Jpeg);//保存我们想要的图片                   
                        //在这里设置进度条,这里我们用到了线程的概念和一个叫Thread的类                        
                        //我们还会用到委托这个知识,等会大家就会看到,怎么使用
                        SetTextMessage(100*(i+1));//让进度起始值从1开始,这样总进度的值就会和设置的值保持一致了。
                        Thread.Sleep(10);//每次存完图片以后让程序等待10毫秒,在执行。如果转的文件页数多了,这个可以给程序
                        //反应时间,不至于出现假死现象
                    }
                }
            }
            //转换完成后,我们给用户一个提示,告诉用户转换的情况
            //这里会用到一个叫MessageBox的类,这类里有一个静态方法show用来显示提示信息的
            //静态方法的调用语法是:类名.方法名
            MessageBox.Show("装换成功");//注意编写代码的时候必须使用英文输入模式的半角模式
        }

        /// <summary>
        /// 我们先自定义一个方法,用来不断更新界面上的进度条的值
        /// 从而可以提示转换的进度
        /// </summary>
        /// <param name="progressValue"></param>
        private void SetTextMessage(int progressValue)
        {
            if (this.InvokeRequired)
            {
                //这里就需要用委托了,创建一个委托对象
                SetProgress setpos = new SetProgress(SetTextMessage);
                this.Invoke(setpos,new object[] { progressValue});//这句话就是让委托将进度值通过UI(界面)线程更新进度条
            }
            else
            {
                this.progressTransform.Value = Convert.ToInt32(progressValue);
            }
        }
    }
}

最后我们一起看看做好的效果

点击下载源代

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯杨1319

您的打赏是我持续创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值