C# (WinForms) 使用 iTextSharp 库将图片转换为 PDF

news2024/12/12 2:26:06

iTextSharp简介
iTextSharp 是一个开源的 .NET 库,主要用于创建和操作 PDF 文档。它是 iText 的 .NET 版本,iText 是一个广泛使用的 Java 库。iTextSharp 继承了 iText 的核心功能并进行了适应 .NET 平台的调整。

iTextSharp 的主要功能包括:

  • 创建 PDF 文档:可以生成带有文本、图像、表格、矢量图形等内容的 PDF 文档。
  • 修改 PDF 文档:支持从现有 PDF 文件中提取文本、添加或删除页面、修改内容等。
  • 数字签名:支持为 PDF 文件添加数字签名,以验证文件的完整性和真实性。
  • 加密与解密:提供对 PDF 文件进行加密保护的功能,支持设置权限(如打印、复制等),并支持解密操作。
  • 表单功能:支持创建 PDF 表单,并允许数据填充、表单提交等操作。
  • 文本抽取:可以从 PDF 文档中提取文本,支持文字提取和 OCR(光学字符识别)功能(需要外部支持)。
  • 支持多种字体和国际化:支持嵌入字体,能够处理不同语言字符集(包括中文、日文等)。
  • 高效性能:能够高效地处理大量 PDF 文件,适用于商业和大型应用程序。

效果图如下:

目标
本文演示如何使用 C# 和 iTextSharp 将图片转换为 PDF 的功能。

使用步骤

首先,我们需要在项目中引用以下两个 DLL 文件:

  • BouncyCastle.Crypto.dll:提供 iTextSharp 在处理数字签名、加密、解密等功能时所需的加密支持。
  • itextsharp.dll:用于操作 PDF 文件。

代码实现

using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace pdfzhuan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // 选择文件按钮,打开文件对话框并选择图片文件
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog
            {
                InitialDirectory = Application.StartupPath, // 设置打开对话框的初始目录
                Title = "请选择要打开的文件", // 设置对话框标题
                Multiselect = true, // 允许多选文件
                Filter = "图片文件|*.jpg|所有文件|*.*", // 设置文件过滤器
                FilterIndex = 2, // 设置默认过滤器索引
                RestoreDirectory = false // 不记忆最后打开的目录
            };

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                string filePath = ofd.FileName; // 获取文件路径
                string fileName = ofd.SafeFileName; // 获取文件名(不包括路径)
                string pdfFile = filePath.Replace(".jpg", ".pdf"); // 设置转换后的 PDF 文件路径
                textBox1.Text = filePath; // 显示图片路径
                textBox2.Text = pdfFile; // 显示 PDF 输出路径
            }
        }

        /// <summary>
        /// 将图片转换为 PDF
        /// </summary>
        /// <param name="jpgfile">图片文件路径</param>
        /// <param name="pdf">生成的 PDF 文件路径</param>
        /// <returns></returns>
        public static bool ConvertJPG2PDF(string jpgfile, string pdf)
        {
            try
            {
                // 创建一个 A4 尺寸的 PDF 文档
                var document = new Document(PageSize.A4, 25, 25, 25, 25);
                using (var stream = new FileStream(pdf, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    // 获取 PDF 写入实例
                    PdfWriter.GetInstance(document, stream);
                    document.Open(); // 打开文档

                    // 加载图片
                    using (var imageStream = new FileStream(jpgfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        var image = Image.GetInstance(imageStream);

                        // 图片如果过大,则缩放以适应页面
                        if (image.Height > PageSize.A4.Height - 25 || image.Width > PageSize.A4.Width - 25)
                        {
                            image.ScaleToFit(PageSize.A4.Width - 25, PageSize.A4.Height - 25);
                        }

                        image.Alignment = Image.ALIGN_MIDDLE; // 设置图片居中
                        document.Add(image); // 将图片添加到 PDF 文档中
                    }

                    document.Close(); // 关闭文档
                }

                MessageBox.Show("PDF 转换成功!");
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"转换失败: {ex.Message}");
                return false;
            }
        }

        // 点击转换按钮,执行转换操作
        private void button3_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("请选择要转换的图片!");
                return;
            }

            string jpgFile = textBox1.Text;
            string pdfFile = textBox2.Text;

            // 执行图片转换为 PDF
            ConvertJPG2PDF(jpgFile, pdfFile);
        }

        // 点击选择文件夹按钮,设置输出 PDF 文件的路径
        private void button2_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("请选择要转换的图片!");
                return;
            }

            FolderBrowserDialog folderDialog = new FolderBrowserDialog
            {
                Description = "请选择图片所在文件夹"
            };

            if (folderDialog.ShowDialog() == DialogResult.OK)
            {
                string filename = DateTime.Now.ToString("yyyyMMddHHmm"); // 生成文件名
                textBox2.Text = Path.Combine(folderDialog.SelectedPath, $"{filename}.pdf"); // 设置输出路径
            }
        }
    }
}

代码解析

  1. 选择图片文件:通过 OpenFileDialog 控件打开文件对话框,用户可以选择 .jpg 格式的图片。选择后,图片路径和对应的 PDF 输出路径会显示在文本框中。

  2. 图片转 PDF:通过 iTextSharp 库,创建一个 A4 尺寸的 PDF 文档。通过 iTextSharp.text.Image.GetInstance() 方法加载图片,如果图片尺寸超过 A4 页面,则自动缩放以适应页面大小。最后,图片被添加到 PDF 中并保存。

  3. 设置输出 PDF 文件路径:用户可以通过 FolderBrowserDialog 选择输出文件夹,并设置 PDF 文件名。

总结

本文介绍了如何使用 iTextSharp 库在 C# WinForms 应用中将图片转换为 PDF。通过简单的用户界面和文件操作,用户可以方便地将 JPG 图片转化为 PDF 格式。这一功能对于批量生成文档、报告或其他图像处理场景非常有用。

源码地址:https://download.csdn.net/download/weixin_44643352/90085127?spm=1001.2014.3001.5503

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…

mysql5.7和mysql8.0安装教程(超详细)

目录 一、简介 1.1 什么是数据库 1.2 什么是数据库管理系统&#xff08;DBMS&#xff09; 1.3 数据库的作用 二、安装MySQL 1.1 国内yum源安装MySQL5.7&#xff08;centos7&#xff09; &#xff08;1&#xff09;安装4个软件包 &#xff08;2&#xff09;找到4个软件包…

ALSA笔记

alsa笔记 ALSA(Advanced Linux Sound Architecture)简介 以上是android和linux系统的音频整体架构图,他们不同的区别主要是在用户空间,Linux通过ALSA-Lib来和ALSA交互,而android则是tingyAlsa,其位于aosp源码根目录的/external/tinyalsa下; 在Kernel层,Alsa向上封装的D…

哈希表实现

哈希概念 哈希&#xff08;hash&#xff09;又称散列&#xff0c;是一种组织数据的方式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字 Key 跟存储位置建立一个映射关系&#xff0c;查找时通过这个哈希函数计算出 Key 存储的位置&#xff0c;进行快…

web复习(四)

JavaScript编程 1.计算圆的面积。 &#xff08;1&#xff09;表单中设置2个文本框、1个按钮、1个重置按钮&#xff0c;其中圆的面积文本框设置为只读&#xff1b; &#xff08;2&#xff09;编写两个自定义函数&#xff0c;分别是计算圆的面积函数area&#xff08;radius&…

第六届地博会世界酒中国菜助力广州龙美地标美食公司推动地标发展

第六届知交会暨地博会&#xff1a;世界酒中国菜助力广州龙美地标美食公司推动地标产品创新发展 2024年12月9日至11日&#xff0c;第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会在中新广州知识城盛大启幕。本届盛会吸引了全球众多知识产权领域的专业人士和…

【期末复习】编译原理

1. 语法描述 1.1. 上下文无关文法 1.2. 句子 & 句型 & 语言 推导出来的都是句型但是如果句型中只含有终结符&#xff0c;那就是句子所有的句子合起来&#xff0c;才是语言 1.3. 文法 文法就是推导的式子。 1.4. 文法二义性 1.5. 文法二义性证明——根据最左 \ 最右推…

AI绘画设计实战-Day2

Stable Diffusion 提示词前缀 FF,(masterpiece:1.2),best quality,highres,extremely detailed CG,perfect lighting,8k wallpaper,anime,comic,game CG, FF&#xff0c;&#xff08;杰作&#xff1a;1.2&#xff09;&#xff0c;最高质量&#xff0c;高分辨率&#xff0c;极其…

python数据分析之爬虫基础:requests详解

1、requests基本使用 1.1、requests介绍 requests是python中一个常用于发送HTTP请求的第三方库&#xff0c;它极大地简化了web服务交互的过程。它是唯一的一个非转基因的python HTTP库&#xff0c;人类可以安全享用。 1.2、requests库的安装 pip install -i https://pypi.tu…

鸿雁电器发力,能否抢占康养卫浴新蓝海?

经济下行&#xff0c;叠加房地产行业的调整以及数智化浪潮的强劲推动&#xff0c;建材行业正面临着前所未有的变革与机遇。为了更好地把握行业趋势&#xff0c;求新求变&#xff0c;12月9日&#xff0c;鸿雁电器在青山湖园区鸿雁物联网大厦17楼鸿鹄厅成功举办了第四届“智创变革…

Scratch教学作品 | 3D飞行模拟器——体验飞行的无限乐趣! ✈️

今天为大家推荐一款令人惊叹的Scratch作品——《3D飞行模拟器》&#xff01;由BamBozzle制作&#xff0c;这款游戏完全用Scratch构建&#xff0c;带你体验开放世界飞行的自由与乐趣。从起飞到降落&#xff0c;每一步都需要你的精准操作&#xff01;更棒的是&#xff0c;这款游戏…

Linux服务器运维管理面板之1panel

华子目录 安装1panel使用卸载浏览器登录 安装 网站&#xff1a;https://community.fit2cloud.com/#/products/1panel/downloads 解压 [rootdocker-node1 ~]# tar -zxf 1panel-v1.10.13-lts-linux-amd64.tar.gz[rootdocker-node1 ~]# cd 1panel-v1.10.13-lts-linux-amd64/ [ro…

SpringBoot【二】yaml、properties两配置文件介绍及使用

一、前言 续上一篇咱们已经搭建好了一个springboot框架雏形。但是很多初学的小伙伴私信bug菌说&#xff0c;在开发项目中&#xff0c;为啥.yaml的配置文件也能配置&#xff0c;SpringBoot 是提供了两种2 种全局的配置文件嘛&#xff0c;这两种配置有何区别&#xff0c;能否给大…

学习笔记063——通过使用 aspose-words 将 Word 转 PDF 时,遇到的字体改变以及乱码问题

文章目录 1、问题描述&#xff1a;2、解决方法&#xff1a; 1、问题描述&#xff1a; Java项目中&#xff0c;有个需要将word转pdf的需求。本人通过使用aspose-words来转换的。在Windows中&#xff0c;转换是完全正常的。但是当部署到服务器时&#xff0c;会出现转换生成的pdf…

Linux下redis环境的搭建

1.redis的下载 redis官网下载redis的linux压缩包&#xff0c;官网地址:Redis下载 网盘链接&#xff1a; 通过网盘分享的文件&#xff1a;redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…

帝可得-运营管理App

运营管理App Android模拟器 本项目的App客户端部分已经由前端团队进行开发完成&#xff0c;并且以apk的方式提供出来&#xff0c;供我们测试使用&#xff0c;如果要运行apk&#xff0c;需要先安装安卓的模拟器。 可以选择国内的安卓模拟器产品&#xff0c;比如&#xff1a;网…

用 Python 从零开始创建神经网络(十六):二元 Logistic 回归

二元 Logistic 回归 引言1. Sigmoid 激活函数2. Sigmoid 函数导数3. Sigmoid 函数代码4. 二元交叉熵损失&#xff08;Binary Cross-Entropy Loss&#xff09;5. 二元交叉熵损失导数&#xff08;Binary Cross-Entropy Loss Derivative&#xff09;6. 二进制交叉熵代码&#xff0…

高质量阅读微信小程序ssm+论文源码调试讲解

第2章 开发环境与技术 高质量阅读微信小程序的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对高质量阅读微信小程序用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&…

AI 学习框架:开启智能未来的钥匙

一、热门人工智能学习框架概述 人工智能学习框架在当今的科技发展中占据着至关重要的地位&#xff0c;它为开发者提供了强大的工具&#xff0c;有力地推动了人工智能的发展&#xff0c;同时也极大地降低了开发的难度。 人工智能学习框架是帮助开发者和研究人员快速构建、训练…

go-blueprint create exit status 1

1. 异常信息 2024/12/06 10:59:19 Could not initialize go.mod in new project exit status 1 2024/12/06 10:59:19 Problem creating files for project. exit status 1 Error: exit status 12. 排查思路 手动进行go mod init查看手动的报错解决报错 3. 解决问题 发现是GO11…