winform-图片转PDF
在日常工作中,我们经常会遇到需要将一堆扫描的图片、图表或者截图合并到一个PDF文件中的需求。虽然网上有很多现成的工具,但要么带有水印,要么需要付费,要么担心隐私问题。作为一名开发者,何不自己动手实现一个呢?
最近,我使用 C# 的 WinForm 框架完成了一个这样的小工具,整个过程非常有趣且富有成就感。今天就把我的实现思路和核心代码分享出来,希望能给有类似需求的朋友一些启发。本项目最大的特点是几乎不依赖大型第三方库,利用 .NET 自身的组件和 iTextSharp 这个轻量级库就能完成。
先给大家看看最终做出来的小工具长什么样,实现了哪些功能:
-
主要功能:
-
支持添加多张图片(支持常见格式如
.jpg,.png,.bmp等)。 -
支持拖拽排序,调整图片生成到PDF中的顺序。
-
支持删除已选中的图片。
-
点击“转换”按钮,选择保存路径,即可生成一个PDF文件。
-





二、 开发环境与技术栈
开发语言: C#
开发环境: Visual Studio 2022
.NET 框架: .NET Framework 4.7.2 (或你的实际版本)
核心依赖库:
iTextSharp(版本: 5.5.13.3) // 如果用了别的库就换掉
安装命令:
Install-Package iTextSharp -Version 5.5.13.3
三、 实现思路与核心代码详解
整个流程其实非常清晰:选择图片 -> 调整顺序 -> 遍历图片并写入PDF文档 -> 保存。
1. 界面布局与图片列表管理
首先,在WinForm上拖拽需要的控件:
ListBox(命名为listBoxImages):用于显示已添加的图片路径。
Button:btnAdd(添加图片),btnRemove(删除),btnUp(上移),btnDown(下移),btnConvert(转换)。代码示例:
核心转换功能:使用 iTextSharp 生成 PDFprivate void btnAdd_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Multiselect = true; // 支持多选 openFileDialog.Filter = "图片文件|*.jpg;*.png;*.bmp;*.jpeg|所有文件|*.*"; if (openFileDialog.ShowDialog() == DialogResult.OK) { // 将选中的文件路径添加到ListBox中 listBoxImages.Items.AddRange(openFileDialog.FileNames); } }这是最关键的部分!
iTextSharp是一个强大的PDF操作库。using iTextSharp.text; using iTextSharp.text.pdf; using System.IO; private void btnConvert_Click(object sender, EventArgs e) { if (listBoxImages.Items.Count == 0) { MessageBox.Show("请先添加图片!"); return; } SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "PDF文件|*.pdf"; if (saveFileDialog.ShowDialog() != DialogResult.OK) return; // 核心代码开始 Document document = new Document(); try { // 创建一个PdfWriter实例来写入文件 PdfWriter.GetInstance(document, new FileStream(saveFileDialog.FileName, FileMode.Create)); document.Open(); // 遍历ListBox中的每一项(图片路径) foreach (string imagePath in listBoxImages.Items) { // 检查文件是否存在 if (!File.Exists(imagePath)) continue; // 使用iTextSharp的Image类读取图片 Image img = Image.GetInstance(imagePath); // 设置图片大小以适应PDF页面(可选:根据需求调整) // 这里设置为A4纸大小减去边距 img.ScaleToFit(document.PageSize.Width - document.LeftMargin - document.RightMargin, document.PageSize.Height - document.TopMargin - document.BottomMargin); // 让图片在页面中居中(可选) img.Alignment = Element.ALIGN_CENTER; // 将图片添加到PDF文档 document.Add(img); // 添加一个分页符,使每张图片都在新的一页(可选,根据需求) document.NewPage(); } MessageBox.Show("转换成功!"); } catch (Exception ex) { MessageBox.Show($"转换过程中出现错误:{ex.Message}"); } finally { // 确保文档被关闭 document.Close(); } }
代码要点解释:
Document:代表一个PDF文档对象。
PdfWriter.GetInstance:将文档与具体的文件流绑定。
Image.GetInstance:从文件路径创建PDF可用的图像对象。
ScaleToFit:这是关键!它确保图片能完整地放在PDF页面内,不会溢出。
document.NewPage():强制分页,让每张图片独立一页。
通过这个小小的项目,我们不仅解决了一个实际需求,还巩固了WinForm编程、文件操作以及
iTextSharp库的使用。这个工具还有很多可以扩展的地方,例如:
添加进度条,让转换过程更加直观。
支持PDF参数设置,如页面大小(A3, A4)、页边距、图片质量等。
实现图片的简单编辑,如旋转、裁剪后再生成PDF。
换用更新的库,如
iText 7(适用于 .NET Core),让项目跨平台。工具地址:https://mp-22e7468a-898b-4fd0-b8ef-c58cd290ba45.cdn.bspapp.com/winform/PhotoChangePDF.zip
注:在使用过程中遇到问题可加微信:lilf0117。
附:加微信可赠送源码。
希望这篇文章对你有帮助。如果你有更好的想法或遇到了问题,欢迎在评论区一起交流!


浙公网安备 33010602011771号