2

使用 iText 以编程方式创建 PDF 文件的方法有两种:

  1. 使用高级对象,例如Paragraph,Chunk
  2. 使用低级功能。PdfContentByte这是使用类的圆顶。

第二种方式在每次插入新数据之前和之后使用beginTextand 。endText

第一个也需要这样做吗?它使用beginTextandendText吗?

我正在使用第一种方式,我得到了一个不平衡的开始结束文本运算符异常。

怎么会这样 ?

4

2 回答 2

2

分析

如果我们查看 iText API:

PdfContentByte是一个包含用户定位的页面文本和图形内容的对象。它知道如何应用正确的字体编码。

是可以添加到文档中的文本中最小的重要部分。大多数元素可以分为一个或多个块。块是具有特定字体的字符串。所有其他布局参数都应在添加此文本块的对象中定义。

PdfContentByte 和 Chunk (Element) 用于不同的目的。它们没有任何共同点,也没有接口,也没有超类(不包括 Object ofc)。

问/答

第一个为什么也这样做?

它使用 begin 开始文本的写入和 end 完成文本的写入并使当前字体无效。

它使用 beginText 和 endText 吗?

不,像 Chunk 和 Paragraph 这样的元素不使用 begin 和 end。它使用 StringBuffer 来保存其文本值。

为什么我会收到“不平衡的开始结束文本运算符”异常?

如果您查看PdfContentByte 的 beginText() 和 endText() 源,您会看到,如果我们尝试在文本尚未完成时开始文本,或在文本尚未开始时结束文本,我们将得到此异常。


确保在开始向其添加任何元素之前调用了 document.open() 并在完成文档时调用了 document.close()。

于 2012-06-12T11:11:32.153 回答
0

在 iText 中使用高级对象时,您无需担心beginText()endText()方法。看看这个 Hello World示例

于 2012-06-12T11:05:28.457 回答