winform-图片转PDF

在日常工作中,我们经常会遇到需要将一堆扫描的图片、图表或者截图合并到一个PDF文件中的需求。虽然网上有很多现成的工具,但要么带有水印,要么需要付费,要么担心隐私问题。作为一名开发者,何不自己动手实现一个呢?

最近,我使用 C# 的 WinForm 框架完成了一个这样的小工具,整个过程非常有趣且富有成就感。今天就把我的实现思路和核心代码分享出来,希望能给有类似需求的朋友一些启发。本项目最大的特点是几乎不依赖大型第三方库,利用 .NET 自身的组件和 iTextSharp 这个轻量级库就能完成。

先给大家看看最终做出来的小工具长什么样,实现了哪些功能:

  • 主要功能

    1. 支持添加多张图片(支持常见格式如 .jpg.png.bmp 等)。

    2. 支持拖拽排序,调整图片生成到PDF中的顺序。

    3. 支持删除已选中的图片。

    4. 点击“转换”按钮,选择保存路径,即可生成一个PDF文件。

图片1

 

图片2

图片3

图片4

图片5

二、 开发环境与技术栈

  • 开发语言: 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):用于显示已添加的图片路径。

  • ButtonbtnAdd (添加图片), btnRemove (删除), btnUp (上移), btnDown (下移), btnConvert (转换)。

代码示例:

private 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

这是最关键的部分!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

图片6

注:在使用过程中遇到问题可加微信:lilf0117。

附:加微信可赠送源码。

希望这篇文章对你有帮助。如果你有更好的想法或遇到了问题,欢迎在评论区一起交流!

posted @ 2025-09-03 11:40  李龙飞  阅读(30)  评论(0)    收藏  举报