当前位置: 首页 > news >正文

PDF生成:全面解析,C# 如何使用iTextSharp库(或其他类似库)生成PDF文档,包括如何将位图图像嵌入PDF中。

一、概述

PDF(Portable Document Format)是一种广泛使用的文档格式,由Adobe公司在1993年推出。PDF的目标是能够在任何设备上呈现固定格式的文档,无论是在不同的操作系统、硬件设备,还是在打印时,都能保证文档的外观和排版一致。

PDF格式支持文本、图像、超链接、表单字段、嵌入式字体、图形、音频、视频等多种元素,广泛应用于电子文档交换、打印、报告生成等多种场景。

二、PDF历史背景

在1980年代,许多软件公司试图开发跨平台的文档格式。Adobe最初提出了PostScript(1982年)来解决这一问题,它是一个描述页面的语言,专门用于打印设备。然而,PostScript需要较高的硬件支持,且使用起来较为复杂,无法满足普通用户的需求。

因此,Adobe于1993年推出了PDF格式,它提供了更为简洁、易用的跨平台文档交换标准。与PostScript不同,PDF能够在各种平台上查看并保证文档格式的稳定性,无论是Windows、MacOS、Linux等操作系统,还是手机和其他设备,PDF文件的格式都能够保持一致。

PDF的流行程度逐年攀升,成为文档交换、归档及电子出版的标准格式之一。

三、C#中如何生成PDF

在C#中生成PDF文件,常用的工具是第三方库。最常见的有 iTextSharp 和 PdfSharp。这些库简化了PDF文档的创建和操作过程,支持添加文本、图像、表格、链接等多种功能。

四、iTextSharp库概述

iTextSharp 是一个功能强大的PDF操作库,最初是用Java开发的,后被移植到C#平台(命名为iTextSharp)。它可以帮助开发者创建、修改和处理PDF文档。iTextSharp的一个优势是其高度的灵活性,能够生成结构化的PDF文档、添加动态内容(如文本、图像、表格、链接等),并支持PDF文档的加密、签名和水印等功能。

4.1 安装 iTextSharp

在C#项目中,使用NuGet包管理器来安装 iTextSharp 库:

打开 Visual Studio,右键点击项目选择“管理NuGet程序包”。
搜索 iTextSharp。
安装最新版本。

Install-Package itext7

iTextSharp 7 是该库的最新版本,提供了更多的功能和优化。

4.2 创建简单的PDF

使用 iTextSharp 创建一个简单的PDF文档,示例如下:

using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;public class CreatePdfExample
{public static void Main(){string pdfPath = "example.pdf";// 创建 PDF 文档using (PdfWriter writer = new PdfWriter(pdfPath)){using (PdfDocument pdf = new PdfDocument(writer)){Document document = new Document(pdf);// 添加文本内容document.Add(new Paragraph("Hello, World!"));}}Console.WriteLine("PDF created successfully!");}
}

此代码段创建了一个包含“Hello, World!”文本的简单PDF文件。

4.3 向PDF中添加图像

可以使用 iTextSharp 库将位图图像嵌入到PDF文档中。下面是如何向PDF添加图像的示例:

using System;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;public class AddImageToPdf
{public static void Main(){string pdfPath = "image_example.pdf";// 创建 PDF 文档using (PdfWriter writer = new PdfWriter(pdfPath)){using (PdfDocument pdf = new PdfDocument(writer)){Document document = new Document(pdf);// 加载并添加图像Image img = new Image(ImageDataFactory.Create("path_to_image.jpg"));document.Add(img);}}Console.WriteLine("PDF with image created successfully!");}
}

在这个示例中,我们首先用 ImageDataFactory.Create() 方法加载图像文件,之后将图像添加到PDF文档中。

五、进阶功能:使用iTextSharp实现更多操作

iTextSharp 提供了丰富的功能,不仅限于文本和图片的添加。以下是一些常见的功能介绍:

5.1 添加表格

using iText.Layout.Element;public class AddTableToPdf
{public static void Main(){string pdfPath = "table_example.pdf";using (PdfWriter writer = new PdfWriter(pdfPath)){using (PdfDocument pdf = new PdfDocument(writer)){Document document = new Document(pdf);// 创建表格(2列,3行)Table table = new Table(2);table.AddCell("Name");table.AddCell("Age");table.AddCell("John");table.AddCell("30");table.AddCell("Alice");table.AddCell("28");// 添加表格到文档document.Add(table);}}Console.WriteLine("PDF with table created successfully!");}
}

5.2 设置页面大小与边距

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;public class SetPageSize
{public static void Main(){string pdfPath = "page_size_example.pdf";using (PdfWriter writer = new PdfWriter(pdfPath)){using (PdfDocument pdf = new PdfDocument(writer)){Document document = new Document(pdf);document.SetMargins(50, 50, 50, 50); // 设置边距// 添加文本document.Add(new Paragraph("This PDF has custom margins!"));}}Console.WriteLine("PDF with custom margins created successfully!");}
}

5.3 添加超链接

using iText.Layout.Element;public class AddHyperlinkToPdf
{public static void Main(){string pdfPath = "hyperlink_example.pdf";using (PdfWriter writer = new PdfWriter(pdfPath)){using (PdfDocument pdf = new PdfDocument(writer)){Document document = new Document(pdf);// 创建超链接Hyperlink link = new Hyperlink("Click here to visit Google", "https://www.google.com");document.Add(link);}}Console.WriteLine("PDF with hyperlink created successfully!");}
}

六、其他常用PDF操作

除了创建PDF,iTextSharp还支持PDF的以下常见操作:

  • 修改现有PDF:可以打开现有的PDF文件,编辑内容或添加新的元素(如文本、图像、表格等)。
  • 合并和拆分PDF:可以将多个PDF文件合并为一个,或将一个PDF拆分成多个文件。
  • 加密和解密:iTextSharp支持PDF的加密,使用密码保护PDF内容,防止未经授权的访问。
  • 数字签名:可以向PDF文件添加数字签名,确保文档的真实性和完整性。
  • 提取内容:iTextSharp可以提取PDF文档中的文本和图像,进行后续处理。

七、总结

通过使用 iTextSharp(或者类似的PDF库),开发者可以在C#中轻松创建、修改和处理PDF文档。iTextSharp不仅提供了丰富的功能来生成复杂的PDF文件(如嵌入文本、图像、表格、超链接等),还支持PDF的加密、签名和内容提取等高级操作。

无论是生成发票、报告、电子书,还是设计自动化文档处理系统,iTextSharp 都是一个强大而灵活的工具。

相关文章:

PDF生成:全面解析,C# 如何使用iTextSharp库(或其他类似库)生成PDF文档,包括如何将位图图像嵌入PDF中。

一、概述 PDF(Portable Document Format)是一种广泛使用的文档格式,由Adobe公司在1993年推出。PDF的目标是能够在任何设备上呈现固定格式的文档,无论是在不同的操作系统、硬件设备,还是在打印时,都能保证文…...

如何选择最适合的消息队列?详解 Kafka、RocketMQ、RabbitMQ 的使用场景

引言 在日常开发中,消息队列已经成为业务场景中几乎不可或缺的一部分。无论是订单系统、日志收集、分布式事务,还是大数据实时流处理,消息队列都在支撑着这些关键环节。目前市面上常用的消息队列有三种(ActiveMQ 虽然在企业集成中仍有应用&a…...

gitlab项目如何修改主分支main为master,以及可能遇到的问题

如果你希望将 Git 仓库的主分支名称从 main 修改为 master: 1. 本地修改分支名称 首先,切换到 main 分支: git checkout main将 main 分支重命名为 master: git branch -m main master2. 更新远程仓库 将本地更改推送到远程仓库…...

RRF(Reciprocal Rank Fusion,倒数排序融合)

RRF(Reciprocal Rank Fusion,倒数排序融合) 摘要 倒数排序融合 RRF 是一种简单的方法,用于结合多个 IR(Information Retrieval) 系统的文档排名,始终比任何单独的系统产生更好的结果。 通过使用 RRF 来结合几个TREC实验的结果,并建立一个 …...

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…...

企业数据无缝对接:从旺店通到金蝶云的入库单管理案例

【类型:盘盈入库】旺店通-入库单管理>金蝶-其他入库单 在企业的日常运营中,数据的高效集成和准确传递是确保业务顺畅运行的关键。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将旺店通企业奇门的数据无缝对接到金蝶云星空&am…...

青少年编程与数学 02-003 Go语言网络编程 19课题、Go语言Restful编程

青少年编程与数学 02-003 Go语言网络编程 19课题、Go语言Restful编程 课题摘要:一、微服务微服务的主要特点包括:微服务架构的挑战:微服务的应用场景: 二、RESTfulRESTful的核心原则和特征包括:RESTful API的优势:REST…...

系统架构设计师论文:论区块链技术及应用

试题三 论区块链技术及应用 区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域。从网络层面来讲,区块链是一个对等网络(Peer to Peer, P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节…...

放电电阻是什么

放电电阻,顾名思义,就是用于放电的电阻。在电路中,当电流突然增大时,如果没有适当的电阻来限制电流,就可能导致电路损坏。因此,放电电阻的作用就是在电路中起到限制电流的作用,防止电路因电流过…...

项目模块十七:HttpServer模块

一、项目模块设计思路 目的:实现HTTP服务器搭建 思想:设计请求路由表,记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表,服务器只接受请求并调用用户的处理函数即可。 处理流程: …...

Spire.PDF for .NET【页面设置】演示:获取 PDF 文件中的页数

计算 PDF 文件中的页数对于各种目的都至关重要,例如确定文档长度、组织内容和评估打印要求。除了使用 PDF 查看器了解页数信息外,您还可以通过编程自动执行该任务。在本文中,您将学习如何使用C#通过Spire.PDF for .NET获取 PDF 文件中的页数。…...

火语言RPA流程组件介绍--点击软件元素

🚩【组件功能】:点击软件UI窗口上的某个元素 配置预览 配置说明 操作目标 支持T或# 从 元素库 中选择一个已捕获的元素或通过 捕获新元素 来捕获新的窗口元素作为操作目标。获取元素方式见 桌面对象元素库使用方法。 模拟人工点击 模拟人工的方式触…...

c++程序设计速学笔记2基础数据结构

基础数据结构 数组(Array) 数组是一种线性数据结构,它存储相同类型的元素的连续内存块。数组的每个元素都有一个索引,用于快速访问和操作数据。 特点: 随机访问:数组支持通过索引快速访问元素。固定大小…...

搜维尔科技:SenseGlove案例-利用VR触觉技术培训机组人员

SenseGlove案例-利用VR触觉技术培训机组人员 搜维尔科技:SenseGlove案例-利用VR触觉技术培训机组人员...

OpenCV视觉分析之目标跟踪(10)估计两个点集之间的刚性变换函数estimateRigidTransform的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算两个2D点集之间的最优仿射变换 estimateRigidTransform 是 OpenCV 中的一个函数,用于估计两个点集之间的刚性变换(即…...

Python 虚拟环境创建

1. 创建python虚拟环境 conda create -n env_name pythonversionex:conda create -n train_ticket_venv python3.112. 查看安装包信息 pip show package_nameex: pip show numpy3. 用清华源安装软件包 pip install package_name -i https://mirrors.tuna.tsinghua.edu.cn/pyp…...

STL-list容器的使用

在C标准库中,std::list 是一个双向链表容器,提供高效的插入和删除操作,尤其适用于需要频繁在容器中间进行插入和删除元素的场景。与其他序列容器(如 std::vector 和 std::deque)相比,std::list 有其独特的优…...

java中线程与集合的面试题

在 Java 面试中,线程和集合相关的知识是非常常见的考察点。以下是几个典型的问题及答案: 线程相关面试题 什么是线程? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以有多…...

第十五章 IRIS 进程之间的通信

文章目录 第十五章 IRIS 进程之间的通信介绍指定作业间通信设备的内存缓冲区禁用作业间通信缓冲区 作业间通信设备编号设备编号 IJC 设备的 I/O 命令OPEN命令device 设备timeout 暂停 第十五章 IRIS 进程之间的通信 本页介绍如何在两个或多个 IRIS 数据平台进程之间建立通信。…...

设计者模式之策略模式

前言 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都写在对象中,将会使对象变得异常复杂;而且有时候支持不频繁使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...