例1:
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.beginText();
cb.setFontAndSize(bf, 12);
cb.showTextAligned(PdfContentByte.ALIGN_CENTER, text + "This text is centered", 250, 700, 0);
cb.endText();
例2:
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.beginText();
cb.setFontAndSize(bf, 12);
cb.setTextMatrix(100, 400);
cb.showText("Text at position 100,400.");
cb.endText();
请参见示例代码1002。
模板(Form xObjects)
当我们在第四章讨论页眉和页脚时,我们定义了一小块添加到每一页的信息,实际上,该小块信息写到了文件的每一个新页上。这并不是最经济的解决方案,更好的办法是将该信息作为一个Form Xobject仅在文档中添加一次,在其可见位置重复出现。我达到该目的,我们将使用模板。
u 创建一个PdfTemplate
u 创建PdfTemplate的最好方法是调用PdfContentByte对象中的createTemplate方法:
PdfContentByte-object:
PdfTemplate template = cb.createTemplate(500, 200);
这样,该模板的宽度为500,高度为200。
通过该模板我们可以做象PdfContentByte同样的事情
template.moveTo(0, 200);
template.lineTo(500, 0);
template.stroke();
template.beginText();
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
template.setFontAndSize(bf, 12);
template.setTextMatrix(100, 100);
template.showText("Text at the position 100,100 (relative to the template!)");
template.endText();
u 添加一个模板到文档
通过象下面一样在绝对位置添加一个模板:
cb.addTemplate(template, 0, 400);
你还可以做一些有趣的事情,如缩放或旋转他们:
//将模板旋转90度
cb.addTemplate(template, 0, 1, -1, 0, 500, 200);
// 缩放模板为50%
cb.addTemplate(template, .5f, 0, 0, .5f, 100, 400);
//缩放模板为200%
cb.addTemplate(template, 2, 0, 0, 2, -200, 400);
具体演示见示例代码1003。
u 第几页共几页
在一些情况下,你希望插入一些你在写本页时外壳无法知道的信息到文本中去,如:在一篇文档的第一页,你并不知道该文档共有几页。只能在完成了整个文档时才知道总的页数。当使用模板时,该问题就不存在了。在示例代码0103中,我们在添加模板到ContentByte前添加了一些信息到模板中,这是没有必要的。我们可以在任何时候添加信息到模板,因为iText添加Form Xobject是在PDF结束的地方(当通过close方法关闭该文档时调用)。示例代码1004显示了首先创建4页然后添加总到页数,该例非常简单和有用。
分栏
在本章以前,你已经掌握了如何将文本放在一个绝对位置,这种情况下,我们要确定文本的开始坐标。如果我们想知道文本的结束位置,我们得做一些计算工作。
现在我们要加一些文本到一个矩形框的内部,希望文本到达右边界时自动换行。超出矩形部分将不显示,可以通过ColumnText类实现。
举个例子:
为显示一个指定的短句在坐标(100, 300)和(200, 500)间的矩形内居中,我们使用下面的代码:
PdfContentByte cb = writer.DirectContent;
ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(phrase, 60, 300, 100, 500, 15, Element.ALIGN_CENTER);
ct.go();
通过查看示例代码1005,你会立即发现通过该方法可以可以画一些复杂的表格而无须Table对象。
另一个例子:
没有必要一次性将文本全部添加进去,你可以先定义一个矩形,