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

news2024/11/13 4:28:54

一、概述

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 都是一个强大而灵活的工具。

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

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

相关文章

RHCE的学习(11)

第八章 防火墙 什么是防火墙 防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。 分类: 硬件防火墙:由厂商设计好的主机硬件,其操作系统主要以提供数据包数据的过滤机制为主&#xff…

Java开发配置文件的详情教程配置文件类型

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…

ffmpeg:视频字幕嵌入(GPU加速)

实现方案 参考指令 ffmpeg -i input_video.mp4 -vf "subtitlessubtitles.srt" output_video.mp4 解决因文件名称复杂导致的指令执行失败问题(引号给文件框起来) ffmpeg -i "A.mp4" -vf "subtitlesB.srt" "c.mp4&qu…

改进系列(3):基于ResNet网络与CBAM模块融合实现的生活垃圾分类

目录 1. ResNet介绍 2. CBAM 模块 3. resnet cbam 3.1 添加在每个layer层后 3.2 关于训练的建议 4. 垃圾分类实战 4.1 数据集 4.2 训练 4.3 最好的权重 4.4 推理 5. 其它 1. ResNet介绍 ResNet(残差网络)是一种深度卷积神经网络模型&#xf…

【HarmonyOS Next】数据本地存储:@ohos.data.preferences

【HarmonyOS Next】数据本地存储:ohos.data.preferences 在开发现代应用程序时,数据存储是一个至关重要的过程。应用程序为了保持某些用户设置、应用状态以及其他小量数据信息通常需要一个可靠的本地存储解决方案。在 HarmonyOS Next 环境下&#xff0c…

【从零开始的LeetCode-算法】3255. 长度为 K 的子数组的能量值 II

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。 一个数组的 能量值 定义为: 如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的 子数组 的能量值。 请你返回一个长度为 n - …

C++ 参数传递 笔记

目录 1、输入参数的传递方式-选择传值还是传引用? 处理用户信息 处理坐标 处理配置 处理ID 2、对于需要修改的参数,使用非const引用传递 有趣的例外:警惕表象的迷惑 需要警惕的陷阱 “糟糕”的update方法: “完美”的set_name与set…

爬虫策略规避:Python爬虫的浏览器自动化

网络爬虫作为一种自动化获取网页数据的技术,被广泛应用于数据挖掘、市场分析、竞争情报等领域。然而,随着反爬虫技术的不断进步,简单的爬虫程序往往难以突破网站的反爬虫策略。因此,采用更高级的爬虫策略,如浏览器自动…

信号-3-信号处理、可重入函数与`volatile`关键字总结

信号处理是操作系统中的一个重要机制,它允许进程在运行期间响应外部事件,并作出相应的处理。为了处理信号,程序员需要理解如何设置信号处理器,如何管理信号的屏蔽与阻塞,以及信号的递送机制。本文将结合操作系统中的信…

深度学习-图像评分实验(TensorFlow框架运用、读取处理图片、模型建构)

目录 0、实验准备 ①实验环境 ②需要下载的安装包 ③注意事项(很关键,否则后面内容看不懂) ④容易出现的问题 1、查看数据并读取数据。 2、PIL库里的Image包进行读取(.resize更改图片尺寸,并将原始数据归一化处…

【Linux系统】—— 基本指令(二)

【Linux系统】—— 基本指令(二) 1 「alias」命令1.1 「ll」命令1.2 「alias」命令 2 「rmdir」指令与「rm」指令2.1 「rmdir」2.2 「rm」2.2.1 「rm」 删除普通文件2.2.2 「rm」 删除目录2.2.3 『 * 』 通配符 3 「man」 指令4 「cp」 指令4.1 拷贝普通…

面向对象技术简述(含设计模式)

6.9.2 面向对象技术 面向对象 对象 分类 继承 通过消息的通信 面向对象 对象 分类 继承 通过消息的通信 面向对象对象分类继承通过消息的通信其中包括: 对象 运行的实体;既包含属性/数据,又包含方法/行为/操作数据的函数;…

【信号处理】基于联合图像表示的深度学习卷积神经网络

Combined Signal Representations for Modulation Classification Using Deep Learning: Ambiguity Function, Constellation Diagram, and Eye Diagram 信号表示 Ambiguity Function(AF) 模糊函数描述了信号的两个维度(dimensions):延迟(delay)和多普勒(Doppler)。 …

【C++练习】两个实型数的加法运算

题目: 编写一个C程序,实现两个实型数的加法运算并输出结果。 要求: 定义一个函数 dadd,该函数接收两个 double 类型的参数,并返回它们的和。在 main 函数中,提示用户输入两个实型数(double 类…

【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)

博主说明:本文项目编号 T 061 ,文末自助获取源码 \color{red}{T061,文末自助获取源码} T061,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

Sql面试题二:请查询出用户连续三天登录的所有数据记录

问题: 现有用户登录记录表,请查询出用户连续三天登录的所有数据记录 id dt 1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 2…

科研绘图系列:R语言分组堆积图(grouped stacked barplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包准备画图主题数据链接导入数据画图数据准备图例图1图2合并图系统信息介绍 分组堆积图(Grouped Stacked Bar Chart)是一种数据可视化图表,它结合了分组柱状图和堆积柱状图…

世界技能竞赛大数据应用开发环境1:1还原

集群情况 模块A搭建环境,在容器中搭建大数据平台 Pc机,安装安装比赛需要软件 模块B中使用idea快速开发完成数据处理 模块E包含了接口数据,使用vs code快速搭建vue数据可视化

【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(下篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

SpringBoot源码解析(一)

SpringBoot自动装配原理 SpringBootApplication注解 我们在使用SpringBoot时,通常使用的是SpringBootApplication这个注解,比如: 而这个注解的定义为下图,可以发现这个注解上有另外三个注解:SpringBootConfiguration…