C# 使用PdfiumViewer.dll依赖对J将PDF文件保存为图片
前言:
我们在办公生活中经常需要将PDF文件转换为图片,每次都不知道如何去处理这个问题,经常使用的一个办法就是使用qq或者微信截图,可是如果这个PDF文件页数比较多我们就不知道要截取到什么时候了,如果使用WPF可能需要开会员才能实现,今天我们一起学习一下如何使用代码实现,C#就这个好,需要什么工具自己写一个就好了,创作不易,点赞关注评论收藏,你的点赞是我学习的动力,也是我更文的方向!!!
一、界面设计
通过使用单选按钮,Button按钮,以及一个文本框负责展示文件保存路径的效果,设计一个简单的界面,将我们想要实现的效果统统先加上去做出来一个可以看的过去的一个界面,方便我们后期写代码。
二、导入PdfiumViewer.dll依赖
这个很重要,没有这个依赖都是空话,这个依赖是通过NuGet程序包下载过来的,使用这个程序包可以快速的将依赖下载好并引用了,相当于JAVA开发的Maven包一样的,不过这个比Maven包好用,它可以检索还可以查看,看后面的演示下载,如果你下载安装不上,也可以下载博主的百度网盘的文件,直接引用就好了,效果是一样的。
PdfiumViewer//检索这个
注:如果你安装不成功,可以试试重启项目再来安装一次,如果还不行,就下载博主的这个依赖包直接导入引用就可以了,找到添加引用添加就行了。
三、效果展示
话不多说,我们先要把效果做出来才行,我们先把效果演示一遍,再对后面的代码桌面实现的去分析一下,选择需要转换的文件,再选择你想要的格式,再点击你要把保存的位置,就可以实现PDF文件转换图片的效果了。
四、代码分析
public string PDFPhotoPath = "";//用来保存文件保存的路径
private void button5_Click(object sender, EventArgs e)
{
OpenFileDialog openFile = new OpenFileDialog();//实例化一个文件打开窗口
openFile.Filter = "PDF(*.pdf)|*.pdf";//打开文件的格式
if (openFile.ShowDialog() != DialogResult.OK)//打开文件是否点击了取消
return;
PDFPhotoPath = openFile.FileName;//获取文件的路径
textBox5.Text = PDFPhotoPath;//在界面展示路径
}
private void button4_Click(object sender, EventArgs e)
{
if (textBox5.Text.Equals("") != true && (radioButton5.Checked != false || radioButton6.Checked != false || radioButton7.Checked != false || radioButton8.Checked != false || radioButton9.Checked != false || radioButton10.Checked != false || radioButton11.Checked != false || radioButton12.Checked != false))//判断是不是没有选图片格式
{
try
{
SaveFileDialog save = new SaveFileDialog();//保存实例化一个保存窗口
save.RestoreDirectory = true; //保存对话框是否记忆上次打开的目录
save.FileName = "选择你需要保存的位置";
if (save.ShowDialog() == DialogResult.OK)//点了保存按钮进入
{
label7.Text = "转换中请耐心等待.....";
if (radioButton5.Checked == true)//判断你是不是选了那个格式这个是GIF
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Gif);
//PDFConvertTo这个是自定义的一个方法,在下面,你只要复制就可以了
}
else if (radioButton6.Checked == true)
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Bmp);
}
else if (radioButton7.Checked == true)
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Jpeg);
}
else if (radioButton8.Checked == true)
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Png);
}
else if (radioButton9.Checked == true)
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Exif);
}
else if (radioButton10.Checked == true)
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Wmf);
}
else if (radioButton11.Checked == true)
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Icon);
}
else if (radioButton12.Checked == true)
{
PDFConvertTo(PDFPhotoPath, save.FileName.Substring(0, save.FileName.LastIndexOf("\")), ImageFormat.Tiff);
}
label7.Text = "转换成功";
}
}
catch
{
label7.Text = "转换失败";
}
}
else
{
MessageBox.Show("选择路径和转换格式之后才能生成文件");
}
}
public static void PDFConvertTo(string inFilePath, string outFilePath, ImageFormat format)//PDF文件转换的方法
{
outFilePath = $"{outFilePath}\{DateTime.Now.ToString("yyyyMMdd-HHmmss")+"IC00"}";//获取你需要的保存的路径和名称
using (var document = PdfiumViewer.PdfDocument.Load(inFilePath))//实例化一个变量,负责加载这个PDF文件
{
var pageCount = document.PageCount;//获取文件的页数
for (int i = 0; i < pageCount; i++)//遍历页数
{
string outFile = $"{outFilePath}({i + 1}).{format}";//输出图片的文件名
var dpi = 300;//像素点
using (var image = document.Render(i, dpi, dpi, PdfRenderFlags.CorrectFromDpi))
{
var encoder = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == format.Guid);//返回 ImageCodecInfo 对象的数组,这些对象包含有关内置在 GDI+ 中的图像解码器的信息。
var encParams = new EncoderParameters(1);//封装 EncoderParameter 对象的数组,初始化可包含指定数量的 EncoderParameters 对象的 EncoderParameter 类的新实例。
encParams.Param[0] = new EncoderParameter( System.Drawing.Imaging.Encoder.Quality, 10L);
image.Save(outFile, encoder, encParams);//图像保存
}
}
}
}
链接:https://pan.baidu.com/s/1NhGdiK7iGCfSxPgLNjCf_w 提取码:IC00
总结:
这篇文章是一篇制作工具类的文章,利用PdfiumViewer依赖去创作的,里面也已经写好了方法让我们调用就可以了,界面制作比较简单,但是是一个比较实用的一个小工具。今天我只是展示了很基本的操作,不是很难大家不要喷啊,很多时候我们都会意识到自己的才疏学浅,所以还是需要不断的学习,创作不易,点赞关注评论收藏,你的点赞是我创作的动力,也是我学习的方向,我们一起加油哈!!!
- 点赞
- 收藏
- 关注作者
评论(0)