该文主要介绍如何借助iTextSharp在C# 2.0中制作PDF文件,本文的架构大致按照iTextSharp的操作文档进行翻译,如果需要查看原文,请点击一下链接:http://itextsharp.sourceforge.net/tutorial/
一、 iTextSharp的介绍和下载
(1)用户可以浏览官网进行查看:http://itextsharp.sourceforge.net/index.html
iText# (iTextSharp) is a port of the iText open source java library written entirely in C# for the .NET platform. iText# is a library that allows you to generate PDF files on the fly. It is implemented as an assembly.
(2)以下链接用于下载:http://sourceforge.net/project/platformdownload.php?group_id=72954
下载后为一个解压缩文件,用户直接解压后得到一个dll动态链接库,在创建的项目中直接引入即可使用(本文的所有代码均在VS 2005环境下测试通过)
二、创建一个PDF文档(原文:http://itextsharp.sourceforge.net/tutorial/ch01.html)
2.1 示例代码分析
创建一个PDF文档大致包括五个步骤,代码如下:
该段代码的效果是可以在当前工作目录下,生成一个名字叫做Chap0101.pdf的PDF文档
2.2 第一步:创建Document对象
(1) Document对象
iTextSharp.text.Document有三个构造函数,分别为:
第一个构造函数调用第二个构造函数,参数为PageSize.A4
第二个构造函数调用第三个构造函数,其中每个边距默认值为36
(2) Page Size
你可以创建自己的用于特定颜色的Rectangle对象,并将其作为pageSize。我们对前面的代码进行修改,即创建一个长的、窄的、背景颜色为淡黄色的PDF文档。代码如下:
大多pageSizes都是采用了PORTRAIT格式,如果你想在LANDSCAPE应用它们,你必须使用rotate(),代码如下:
(3) Margins
在创建document的过程中,你也可以定义左、右、上、下边距,代码如下所示:
注意:如果你修改pageSize,会在下一个页面创建时产生影响;如果你修改margins,则会在当前页面立即产生影响。
2.3 创建Write对象
一旦成功创建了document,我们必须创建一个或者多个实例用于监听document,所有的writers继承于iTextSharp.text.DocWriter类。即你可以iTextSharp.text.pdf.PdfWriter 使用来生成PDF文档,而如果需要生成Tex文档你必须使用iTextSharp.text.TeX.TeXWriter。
你可以使用以下的方式创建实例:
在使用过程中,你几乎不会使用到writer对象(除了你想创建高级的PDF文件或者你想使用一些特定的函数,比如ViewerPreferences或者Encryption),所以获取这类实例就足够了。
该函数的第一个参数即第一步所创建的document对象;
第二个参数为不同类型的Stream对象,目前我们都只使用System.IO.FileStream,后来我们会使用到System.IO.MemoryStream.
2.4 元数据以及打开document
在你添加实际数据(即内容)是,你可能想加入某些关系到document的元数据,其方法如下:
你可以选择自己的Title,Subject,Keywords,Author以及Creator,但是添加制作者的函数必须一直使用,以及添加创建时间的方法添加的当前系统的时间(事实上,这两个方法是被自动调用的),你可以用客户的姓名作为Header,但是这对于PdfWrite没有任何影响。
2.5 添加内容
1、在前面的三个步骤中,你遇到了诸如:Phrase,Paragraph…的对象,在以后的章节会详细的给予介绍。有些时候,你可能希望writer可以忽略document中的行为,相关的代码可以查看
2、如果你想创建两个writer:writerA和writerB(这个代码在第二步会丢出异常)
实际上,我们需要对其进行简单的修改,修改后的代码如下:
2.6 关闭document
关闭document相当重要,因为它会影响和关闭writer写的输出流,close方法为finalize方法,但是你不能依靠它,你必须手工对其进行关闭。
三、Chunks, Phrases 和Paragraphs(原文http://itextsharp.sourceforge.net/tutorial/ch02.html)
3.1 Chunk
Chunk是能够添加到document文本中最小的重要部分。Chunk能够为其他的元素诸如Phrase以及Paragrph等构建块,一个Chunk就是一个附有指定字体的字符串,在添加chunk的文本的对象中,所有其他的版面设计参数都应该定义。
下面的代码表示我们创建内容为"Hello world"格式为(red, italic COURIER font of size 20)的Chunk:
3.2 Phrases
Phrases是一系列拥有特定的作为额外参数的leading(=两行之间的空间)的Chunk
Phrases拥有一个主字体,但是其他的chunks可以拥有不同于这个主字体的其余字体,你可以从多种构造函数中创建Phrases对象。代码如下: