第二章 PDF 马达启动-2.1.3

2.1.3 打开文档
    对java程序员来说也许更习惯于在添加内容前必须打开数据流。你创建一个新的数据流然后向里面些字节,字符,字符串等。
在itext中,首先打开文档是被要求的。当一个文档对象被打开时,很多初始化工作被执行。如果你使用无参数的document构造器并且你想要通过适当的设置方法改变页的大小和页边距。那么在打开文档之前去作这些设置是很重要的。否则默认的页大小和页边距将被应用到首页,你设置的页的属性只在第二页之后被应用。
比如下面这一段代码就会在文档的第一页就使用信纸大小,横排,左0.5,右1,上1.5,下2的页边距:
/* chapter02/HelloWorldOpen.java */
Document document 
= new Document();
PdfWriter.getInstance(document, 
new
FileOutputStream(
"HelloWorldOpen.pdf"));
document.setPageSize(PageSize.LETTER.rotate());
document.setMargins(
3672108144);
document.open();
所以很多itext用户问相同的一个问题:“为什么我的也的设置应用到了所有的也就除了第一页。”答案几乎就一样的,就是“要把document的设置语句放在document.open();之前。”
   很多文档类型保存版本信息和原数据在文件头部。这就是为什么你应该一直要在打开文档之前设置pdf版本信息和添加原数据的原因。

pdf头:
   当document.open()被调用时,itext的文档写入器(docwriter)开始写入第一个字节到输出流。在pdfwriter的情况下,一个pdf头被写入,默认的它是这个样子的:
%PDF-1.4
%âãÏÓ
   第一行显示的pdf文档的版本,这是很明显的。第二行可能看上去有些古怪,一个百分号开始,这表示他是一个pdf注释行。因此不被看成有任何的函数。添加这一行不是必须的。但是这么作是被推荐的因为它保证:“合适的文件传输程序检查文件开始的数据以决定是以文本还是二进制来对待文件的内容”。
pdf文档是二进制文档。而有些系统或程序可能不能处理二进制字符,所以造成pdf文档的破坏是几乎不可避免的。根据pdf文档参考。这个问题能够通过在文档的开始部分加入刚才的最后四个二进制字符(âãÏÓ)得以避免。
 
   当前,itext建立的pdf文档默认的版本是1.4,通过下表,你可能发现这个版本相当的老。
如果你想要使用其他版本才有的特性,你可以通过一下命令改变生成文件的默认版本PdfWriter.setPdfVersion(),例程:
/* chapter02/HelloWorldVersion_1_6.java */
Document document 
= new Document();
PdfWriter writer 
= PdfWriter.getInstance(document,
new FileOutputStream("HelloWorld_1_6.pdf"));
writer.setPdfVersion(PdfWriter.VERSION_1_6);
document.open();
这段程序生成的文档有意的使Adobe Reader 7.0和其以后版本才能打开,使用以前的版本打开它,你将得到一个警告甚至错误。错误的愿意我将在下面的章节进行解释。
   注意:改变版本号必须在document.open();之前。原因很简单,因为在document.open();执行时会写入版本信息。
   一个pdf文档的原数据被保存在一个信息辞典中。这个辞典是一个pdf对象,它可以被放在pdf文件的任何地方。在理论上,如果之生成pdf文件的情况下,在文档打开后添加原数据是可能的。但是,在实际上,处于使代码可以同时生成html,rtf,pdf等格式的目的,这么做(档打开后添加原数据)是不被允许的。
添加原数据:
  让我们从新写一下helloworldmultiple例程 然后加入一些添加原数据的代码:
/* chapter02/HelloWorldMetadata.java */
document.addTitle(
"Hello World example");
document.addSubject(
"This example shows how to add metadata");
document.addKeywords(
"Metadata, iText, step 3, tutorial");
document.addCreator(
"My program using iText");
document.addAuthor(
"Bruno Lowagie");
document.addHeader(
"Expires""0");
document.open();
如果生成html文件 你就能在文件的<head>标签对中找到如下内容:
<head>
<title>
Hello World example
</title>
<meta name="subject" content="This example shows how to add metadata" />
<meta name="keywords" content="Metadata, iText, step 3" />
<!-- Creator: My program using iText -->
<meta name="author" content="Bruno Lowagie" />
<meta name="Expires" content="0" />
<!-- iText 1.4 (by lowagie.com) -->
<!-- CreationDate: Wed Dec 28 09:44:40 CET 2006 -->
</head>
在pdf中,原数据通过addHeader添加名值对到pdf信息字典中。上面的例子中添加一个expires关键词。它在pdf语法中没有任何意义,所以不影响pdf文件。在acrobat reader中使用the File > Document Properties > Description 可以看到刚才添加的信息。
   如果你要在邮件列表中得到帮助,就不要改变producer信息和创建日期信息。因为这些信息将告诉别人你使用的itext的版本。
   如果你经历了一些itext创建文件的问题,你可以使用这个信息确认这个问题是否由这个版本的一些bug引起。

好了,现在你已经添加了愿数据和打开了文档,你可以开始向文档中添加真实的数据了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值