PDF 马达启动(iText in action翻译第2章第1节)(2)

 
页面颜色
如果你使用一个 Rectangle 作为 PageSize 的参数, 你也可以改变这个页面的背景颜色
在接下来的例子里面, 你可以调用 Rectangle setBackgroundColor() 方法来将背景改成浅蓝色:
/* chapter02/HelloWorldBlue.java */
Rectangle pagesize 
=   new  Rectangle( 612 792 );
pagesize.setBackgroundColor(
new  Color( 0x64 0x95 0xed ));
Document document 
=   new  Document(pagesize);
 
 
在这个例子里面,你使用的是 java.awt.Color 这个颜色是用 RGB 的方式来设置的 如果你习惯于使用 CMYK 的颜色来设置 你可以使用 com.lowagie.text.pdf.ExtendedColor 对象。 你可以在附录 A 的第 8 节了解 iText 的类结构,在 11 章你可以阅读有关颜色的内容, iText API 包含了第 3 种的 Document 对象的构建函数,不仅包含了一个 Rectangle, 4 Float 的参数, 我们在这里不再详述了。
页边距
在例子的第 4 步, 我们让 Document 对象增加了一个段落: Paragraph ,这个段落包含一段文字: hello world ,但是, iText 怎么知道把这个文字放在页面的那个地方呢?这个答案相当简单:当我们增加段落, 短语或者区块到 Document 对象的时候, iText 设定相同的上下左右空间, 这个就是页边距,你之前创建的“ Hello World ”例子里面, iText 使用默认的页边距, 半英寸,让我们来改变这个数字:
/* chapter02/HelloWorldMargins.java */
Document document 
=   new  Document(PageSize.A5,  36 72 108 180 );

PDF文档的左边距是36PT,右边距是72PT上边距是108PT,下边距是180PT

你也可以这样设置奇偶页面边距的对称性:
/* chapter02/HelloWorldMirroredMargins.java */
document.setMarginMirroring(
true );
在这个例子里面, 所有的奇数页面的左边距是 36PT 右边距是 72pt , 而偶数页面, 刚好相反。
2.1.2 获取一个 DocWriter 实例
一旦你获取了一个 Document 对象, 你就得决定将这个文件写到一个文件里面, 还是内存, 还是一个 Java Servlet 得输出流。你也要决定你是生成 PDF 格式还是其他得 HTML 或者 RTF 格式 .
2 步里面我们做了两件事情:
 
它告诉 DocWriter 那个流是用来写入和生成文件的 .
它和一个 DocWriter 的实例协作 在本书里面, 我们专注于 PdfWriter 实例, 因为我们的兴趣点在于创建 PDF 文件, 但是你要知道, 你也可以创建一个 RtfWriter2 实例或者 HtmlWriter 实例来生成 RTF HTML
 
这些 Writers 对象决定了你将要写入 Document 的内容的最后文件格式: PDF, HTML 或者 RTF.
这些类的图例可以从附录 A A.1 章获取,里面展示了他们之间的关系,在该页的左上部分, 你可以看到 Document 对象有一个 Listeners ArrayList 属性,这些 Listener 扩展了 DocListener 接口,作为一个实例, 如果你想这些 Document 对象增加内容, 它将把这些方法转交给 Listener ,而这个 Listener 的接口都是由 DocWriter 的子类来实现的。
你可以从这些类图上发现, 这些类的构造函数是 protected 的, 你只能通过 getInstance() 方法来获取, 这个 getInstance ()方法创建了一个 writer 对象给 Document 同时增加了 listener 接口 Document. 例如 PdfDocument RtfDocument 对象 .
 
创建内容相同格式不同的文档
我们在代码中加入一下语句, 来看看会发生什么:
/* chapter02/HelloWorldMultiple.java */
PdfWriter.getInstance(document,
new  FileOutputStream( " HelloWorldMultiple.pdf " ));
RtfWriter2.getInstance(document,
new  FileOutputStream( " HelloWorldMultiple.rtf " ));
HtmlWriter.getInstance(document,
new  FileOutputStream( " HelloWorldMultiple.htm " ));
 
你使用 PDF , RTF , HTML 的格式的 Writer 对象, 所以你可以获得 3 个不同格式的文件。但是注意, 不是所有的内容都可以添加到这三种格式的。
 
选择一个输出流
当你向文档里面增加内容的时候, 实际上是把一些 PDF , RTF , HTML 语法写入到输出流里面,到目前为止, 你用的是 java.io.FileOutputStream . ,本书采用的例子之所以使用这个流, 是因为这样你可以尝试 PDF 的操作, 而又不用安装一些额外的软件, 如: web 服务器或者 J2EE 容器等等。
在实际的应用程序里面, 你可能会把 PDF 的字节流写入到一个浏览器( Servlet OutputStream )或者内存里面( ByteArrayOutputStream ), iText 可以写入字节到任何的 java.io.OutputStream 和他的子类里面。 如果你想把 PDF 写入到 System.out 然后看看 PDF 会是什么样子, 你可以这样做:
/* chapter02/HelloWorldSystemOut.java */
PdfWriter.getInstance(document, System.out);
如果你去尝试这个例子,你可以识别出 “Hello World”, 但是你也会发现, 对象用 object 来表示,还有一些奇怪的 2 进纸代码。在 18 章, 我们将可以看到 iText PDF 的内幕, 你将可以看到 PDF 的文件构成, 这些是为想深入理解 PDF 格式的人准备的, 你要是感兴趣如何在 web 应用里面创建一个 PDF 你可以使用 javax.servlet.ServletOutputStream 来作为 PDFWriter 的参数。 java.io.OutputStream 你也可以用 response.getOutputStream() 来作为创建 PdfWriter 的第 2 个参数, 但是这样可以在一些浏览器里面运行, 但是很不幸, 有些是不行的。 17 章将告诉你如何规避在 web 应用中使用 iText 的缺陷,这些缺陷是浏览器相关的, 不是和 iText 相关的。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值