第一部分:iText的一般应用

Itext教程翻译

――熊建峰

www.passtwo.com

       最近因为项目的事情需要使用pdf进行报表打印,到网上找了很多资料,没有找到太合适的,内容都大同小异,讲得不够细致、系统,无奈,只好到官方网站上去找了,官方网站有教程,只不过时英文的,于是就想翻译过来共大家学习,参考。本人英语水平有限,有很多不妥的地方欢迎大家指正。passtwo@gmail.com

序言

       iText是一个可以使开发人员的web应用程序(或者其他java程序)拥有动态生成pdf文档的功能。在本教程里面,你可以通过大量单独的例子来学习iText的大多数功能和特性。他们可以很容易的和大多数的servlet,Java Web Start Application,或者其他java程序。这篇教程并不是完全的,但是以后会定期更新。

l         第一部分:iText的一般应用

l         第二部分:高级对象的使用

l         第三部分:字体

l         第四部分:直接内容

l         第五部分:互动性

l         第六部分:iText工具箱

l         第七部分:RTF

l         第八部分:HTML

l         第九部分:XML

l         第十部分:待续…..

第一部分:iText的一般应用

     Hello Word

       五步建立一个pdf文档

本节向导

l         五步建立一个pdf文档

l         第一步:Document对象

l         第二步:Writer对象

l         第三步:打开文档

l         第四步:添加内容

l         第五步:关闭文档

示例文件

1.         HelloWorld

u       创建一个简单的”Hello World” PDF文件

u       输出结果:

l         HelloWorld.pdf

2.         DefaultPageSize

u       使用标准的(默认的)页面尺寸和预先定义的标准页面尺寸创建一个Pdf文件

u       输出结果:

l         DefaultPageSize.pdf

3.         LandscapePortrait

u       创建一个第一页横放第二页竖放的PDF文件。(这是看结果翻译的,原话:Generates a PDF document with the first page in Lanscape; the second page in Portrait

u       输出结果:

l         LandscapePortrait.pdf

4.         CustomPageSize

u       使用自定义尺寸和背景色创建一个PDF文件

u       输出结果:

l         CustomPageSize.pdf

5.         Margins

u       Margin(也就是上下左右的边距)功能示范

u       输出结果:

l         Margins.pdf

6.         HelloSystemOut

u       PDF输出到System.out

u       输出结果:

l         HelloWorld.txt

7.         HelloWorldMultiple

u       同时向不同的writers输出;使用pause()resume()

u       输出结果:

l         HelloWorldPdf.pdf

l         HelloWorldRtf.rtf

l         HelloWorldHtml.html

8.         HelloEncrypted

u       又一个“Hello WorldPDF文件,不过这次的文件是加过密的,在阅读之前,你需要知道用户密码:Hello

u       输出结果:

l         HelloEncrypted.pdf

9.         HelloWorldMeta

u       PDF文档中添加Metadata(不知道什么意思)

u       输出结果:

l         HelloWorldMeta.pdf

五步创建一个PDF文档

       在我学习第一门编程语言的时候(TI-99/ 4A 电脑上运行的BASIC语言),我做的第一个程序就是”Hello World”例子。那是1982年,我那时12岁。现在,我已经20多岁了,但是我仍然写着同一个程序:一个仅仅输出”Hello World”的例子,不过这次不是在那蓝色的屏幕上,而是在一个PDF文件上。

       这个例子向你展示了使用iText创建一个新的PDF文档所必须的五个步骤:

²        第一步:创建一个com.lowagie.text.Document:的实例。

Document document = new Document();

²        第二步:创建一个Writer(com.lowagie.text.pdf.PdfWriter的实例),监听这个文档,并且将这个文档输出到你所选择的输出流(OutPutStream)中:

PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));

²        第三步:打开这个文档

document.open();

²        第四步:向文档中添加内容

document.add(new Paragraph("Hello World"));

²        第五步:关闭文档

document.close();

java文件下载:com.lowagie.examples.general.HelloWorld

PDf文件:HelloWorld.pdf

下面,我们将详细介绍每一步。

第一步:Document对象

       com.lowagie.text.Document类有3个构造函数:

       public Document();

public Document(Rectangle pageSize);

public Document(Rectangle pageSize,

      int marginLeft,

     int marginRight,

     int marginTop,

     int marginBottom);

第一个构造函数使用PageSize.A4参数调用第二个构造函数。第二个构造函数调用第三个,对每个margin值使用36

PageSize

       默认纸张是A4(iText是欧洲的,A4是那里最常用的一种格式),但是为了方便期间,com.lowagie.text.PageSize类也提供了其他一些标准尺寸:A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA 等等。

Java文件下载:com.lowagie.examples.general.DefaultPageSize

Pdf文件下载:DefaultPageSize.pdf

大部分的标准尺寸都是PORTRAIT-format(不知道怎样翻译)格式,To create a document in landscape format, just make the height smaller than the width.(不知道怎样翻译,大致意思是要创建一个xx格式的文档,只需要将height设置的比width小就可以了)。所有的标准尺寸都可以使用rotate()函数来进行旋转:

Document document = new Document(PageSize.A4.rotate());

Java文件下载:com.lowagie.examples.general.LandscapePortrait

Pdf文件下载:LandscapePortrait.pdf

       当然,并不是说你只局限于这个列表中,你可以使用任何尺寸创建任何你自己想要的页面(尽管Acrobat 3.0最大支持200×200,最小:45×45英寸)。你也可以定义页面的背景颜色。在下面的例子中我们将创建一个有淡黄色背景的又长又窄的文档。

Java文件下载:com.lowagie.examples.general.CustomPageSize

Pdf文件下载:CustomPageSize.pdf

如果你想了解更多,请参考:FAQ.

Margins

       在第四步,你将向文档中添加一些内容,如果你使用高级对象,你将不必关心边距和布局的问题,高级对象已经帮助你完成了这些。当然,你首先必须先定义边距,也就是说:如果你希望使用除了36点(半英寸)之外的边距,你可以在向文档里面添加内容之前来改变边距。注意:改变只会在下一页显示出来(译者注:最好在添加内容之前改变),如果你希望边距镜像(奇数页和偶数页),你可以执行这个方法:setMarginMirroring(true).

Java文件下载:com.lowagie.examples.general.Margins

Pdf文件下载:Margins.pdf

如果你想了解更多,请参考:FAQ.

为什么getPagenumber(页码)没有工作?

       Document类是关于内容的,不是关于表现的,不同的writers可以监听到同一个Document上,所以,并不能从Document对象获得页码。Document返回那个数呢?到底是PDF文档的页码呢还是HTML文档的页码?提示:你可以从特定的文档对象获得页码,但不是Document对象。

第二步:Writer对象

       一旦Document对象被创建,我们可以创建一个或者多个Writer对象来监听这个文档。所有的Writer对象应该是从抽象类com.lowagie.text.DocWriter继承下来的。当前支持三种Writer对象:

PdfWriter

       创建PDFPortable Document Format便携文档格式)文档

RtfWriter

       创建RTF文档。关于RTF更多的情况请参阅RTF一节

HtmlWriter

       创建Html文档,这个最初是为调试错误写的(参考用iText生成Html文档)

       所有的这些Writers都是从DocWriter继承下来的。writer-classes的构造函数是protected(保护型)型的你只能使用静态方法getInstance来获得它的实例:PdfWriter.getInstance, RtfWriter2.getInstance or HtmlWriter.getInstance:

public static xxxWriter getInstance(Document document, OutputStream os) throws DocumentException

注:实际使用时xxx 换成 Pdf, Rtf Html

PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));

使你吃惊的或许是“看上去没有创建对象呀”?或许你期望的是这种形式:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));

实际上,上面两种情况下都有一个Writer对象,但是在简单的应用程序中,你永远不会用到它。

       getInstance的第一个参数是我们第一步创建的Document对象,第二个参数可以是任意的java.io.OutputStream对象,在本教程中,我们总是使用java.io.FileOutputStream对象,但是你可以使用ava.io.ByteArrayOutputStream在内存中创建一个PDF文档,或者一个javax.servlet.ServletOutputStream,如果你愿意,你甚至可以将Pdf文件输出到System.out上,(但是看起来不怎么样)如下图:

Java源文件:com.lowagie.examples.general.HelloSystemOut

Pdf文件:HelloWorld.txt

注:你可以使用不同的writer同时监听到同一个文档上,例如:如果你想通过servler直接向浏览器传送一个pdf对象,但是又希望在服务器上保留一个副本,你可以对一个document对象执行两次getInstance方法,不同的仅仅是outputstream对象。

Ghent University,我们需要将编程的相关信息发布成两个版本,一个是用于网站发布的html文件,另外一个是用来打印的Pdf文件,这可以使用同一段代码来完成,甚至是同一个document对象,区别只是在某些地方,我们暂停PdfWriter,向Pdf文档添加一个从html页面获得的链接,下面的例子可以说明这一点:

Java文件:com.lowagie.examples.general.HelloWorldMultiple

结果:HelloWorldPdf.pdf HelloWorldRtf.rtf HelloWorldHtml.html

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值