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

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;// 执行图片转换为 PDFConvertJPG2PDF(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.mzph.cn/web/62326.shtml

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

相关文章

【中间件开发】Redis基础命令详解及概念介绍

文章目录 前言一、Redis相关命令详解及原理1.1 string、set、zset、list、hash1.1.1 string1.1.2 list1.1.3 hash1.1.4 set1.1.5 zset 1.2 分布式锁的实现1.3 lua脚本解决ACID原子性1.4 Redis事务的ACID性质分析 二、Redis协议与异步方式2.1 Redis协议解析2.1.1 redis pipeline…

学习记录,正则表达式, 隐式转换

正则表达式 \\&#xff1a;表示正则表达式 W: 表示一个非字&#xff08;不是一个字&#xff0c;例如&#xff1a;空格&#xff0c;逗号&#xff0c;句号&#xff09; W: 多个非字 基本组成部分 1.字符字面量&#xff1a; 普通字符&#xff1a;在正则表达式中&#xff0c;大…

Selenium是广泛使用的模拟浏览器运行的库

简介 Selenium是广泛使用的模拟浏览器运行的库&#xff0c;它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样&#xff0c;并且支持大多数现代 Web 浏览器。 环境 安装 pip install selenium下载Chrome驱动 系统环境…

网络练级宝典-> UDP传输层协议

目录 传输层 端口号 端口号和进程的关系 UDP协议 UDP协议格式 UDP数据封装&#xff1a; UDP数据分用&#xff1a; 面向数据报 UDP的缓冲区 UDP的缺点 基于UDP的应用层协议 传输层 端口号 我们知道端口号对应的其实就是一个进程的pid&#xff0c;在操作系统中二者的…

Redis原理—1.Redis数据结构

大纲 1.Redis的数据结构 2.Redis的SDS 3.Redis的链表 4.Redis的字典 5.Redis的跳跃表 6.Redis的整数集合 7.Redis的压缩列表 8.Redis的对象 9.Redis对象的几个关键属性 10.Redis的单线程为什么这么快 11.Redis的典型应用场景和说明 12.Redis的相关命令说明 1.Redis…

【Vue3中Router使用】

Vue3中Router使用 1. 安装vue-router组件2. 建两个测试页面2.1 测试页面Home.vue2.2 测试页面Category.vue 3. 创建路由对象4. 在入口main.js中引入router把App.vue改成路由页面5. 测试5.1 关闭检查解决ESlint报错5.2 改文件名解决ESlint检查报错测试WebHashHistory 和WebHisto…

python拆分Excel文件

按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文档样式如下&#xff1a; 结果&#xff1a;红色是按照Sheet名拆出的&#xff0c;蓝色和橙色是某个Sheet按照某列的不同值拆分的。 代码&#xff1a; # -*- coding: utf-8 -*- """ 拆分excel文件——按照…

交易所 Level-2 历史行情数据自动化导入攻略

用户部署完 DolphinDB 后&#xff0c;需要将历史股票数据批量导入数据库&#xff0c;再进行数据查询、计算和分析等操作。DolphinDB 开发了 ExchData 模块&#xff0c;主要用于沪深交易所 Level-2 行情原始数据的自动化导入&#xff0c;目前已支持的数据源包括&#xff1a; 沪…

开源ISP介绍(2)————嵌入式Vitis搭建

Vivado搭建参考前一节Vivado基于IP核的视频处理框架搭建&#xff1a; 开源ISP介绍&#xff08;1&#xff09;——开源ISP的Vivado框架搭建-CSDN博客 导出Hardware 在vivado中导出Hardware文件&#xff0c;成功综合—实现—生成比特流后导出硬件.xsa文件。&#xff08;注意导…

109.【C语言】数据结构之二叉树层序遍历

目录 1.知识回顾 2.代码实现 准备工作 LevelOrder函数 代码框架 关键代码 3.执行结果 1.知识回顾 层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章 截取的部分内容 定义:按层的方式遍历(,设n为树的深度,h1-->h2-->h3-->...-->hn) 以下面…

安装部署PowerDNS--实现内网DNS解析

PDNS是PowerDNS的缩写&#xff0c;是一个开源的DNS服务器软件。PowerDNS具有高性能、灵活性和可扩展性&#xff0c;可用于搭建各种规模的DNS解析服务。它支持多种后端数据库&#xff08;如MySQL、PostgreSQL等&#xff09;&#xff0c;提供高度定制化的配置选项&#xff0c;并具…

13.在 Vue 3 中使用OpenLayers加载鹰眼控件示例教程

在 WebGIS 开发中&#xff0c;鹰眼控件 是一个常用的功能&#xff0c;它可以为用户提供当前地图位置的概览&#xff0c;帮助更好地定位和导航。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;创建一个简单的鹰眼控件示例。 效果预览 在最…

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞&#xff1a;Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时&#xff0c;需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤&#xff0c;为单节…

使用C#基于ADO.NET编写MySQL的程序

MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本&#xff1a;MySQL 服务器系统和 MySQL 嵌入…

计算机视觉与各个学科融合:探索新方向

目录 引言计算机视觉与其他学科的结合 与医学的结合与机械工程的结合与土木工程的结合与艺术与人文的结合发文的好处博雅知航的辅导服务 引言 计算机视觉作为人工智能领域的重要分支&#xff0c;正迅速发展并渗透到多个学科。通过与其他领域的结合&#xff0c;计算机视觉不仅…

SpringBoot期末知识点大全

一、学什么 IoC AOP&#xff1a;面向切面编程。 事物处理 整合MyBatis Spring框架思想&#xff01; 二、核心概念 问题&#xff1a;类之间互相调用/实现&#xff0c;导致代码耦合度高。 解决&#xff1a;使用对象时&#xff0c;程序中不主动new对象&#xff0c;转换为由外部提…

QT模型/视图:自定义代理类型

简介 在模型/视图结构中&#xff0c;代理的作用就是在视图组件进入编辑状态编辑某个项时&#xff0c;提供一个临时的编辑器用于数据编辑&#xff0c;编辑完成后再把数据提交给数据模型。例如&#xff0c;在 QTableView 组件上双击一个单元格时&#xff0c;代理会提供一个临时的…

ubuntu中使用ffmpeg库进行api调用开发

一般情况下&#xff0c;熟悉了ffmpeg的命令行操作&#xff0c;把他当成一个工具来进行编解码啥的问题不大&#xff0c;不过如果要把功能集成进自己的软件中&#xff0c;还是要调用ffmpeg的api才行。 ffmpeg的源码和外带的模块有点太多了&#xff0c;直接用官网别人编译好的库就…

实现 DataGridView 下拉列表功能(C# WinForms)

本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能&#xff0c;并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。 1. 效果展示 该程序的主要功能是展示如何在 DataGridView 中插入下拉列表&#xff0c;并在选择某一项时触发事件。 2.…

Docker Compose实战一( 轻松部署 Nginx)

通过过前面的文章&#xff08;Docker Compose基础语法&#xff09;你已经掌握基本语法和常用指令认识到Docker Compose作为一款强大工具的重要性&#xff0c;它极大地简化了多容器Docker应用程序的部署与管理流程。本文将详细介绍如何使用 Docker Compose 部署 Nginx&#xff0…