页面颜色
如果你使用一个
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);
Rectangle pagesize = new Rectangle( 612 , 792 );
pagesize.setBackgroundColor( new Color( 0x64 , 0x95 , 0xed ));
Document document = new Document(pagesize);
页边距
在例子的第
4
步,
我们让
Document
对象增加了一个段落:
Paragraph
,这个段落包含一段文字:
hello world
,但是,
iText
怎么知道把这个文字放在页面的那个地方呢?这个答案相当简单:当我们增加段落,
短语或者区块到
Document
对象的时候,
iText
设定相同的上下左右空间,
这个就是页边距,你之前创建的“
Hello World
”例子里面,
iText
使用默认的页边距,
半英寸,让我们来改变这个数字:
/**/
/* chapter02/HelloWorldMargins.java */
Document document = new Document(PageSize.A5, 36 , 72 , 108 , 180 );
Document document = new Document(PageSize.A5, 36 , 72 , 108 , 180 );
样PDF文档的左边距是36PT,右边距是72PT,上边距是108PT,下边距是180PT
你也可以这样设置奇偶页面边距的对称性:
/**/
/* chapter02/HelloWorldMirroredMargins.java */
document.setMarginMirroring( true );
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 " ));
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);
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
相关的。