第二章 PDF 马达启动-2.1.2

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