有两种使用iText以编程方式创建PDF文件的方法:
Paragraph
,Chunk
等高级对象PdfContentByte
类的圆顶。第二种方式是在每次插入新数据之前和之后使用beginText
和endText
。
首先是否也需要这样做?它使用beginText
和endText
吗?
我正在使用第一种方式,而且我得到了一个不平衡的开始结束文本运算符异常。
怎么可能?
答案 0 :(得分:2)
如果我们查看iText API:
PdfContentByte是一个包含用户定位文本的对象 和页面的图形内容。它知道如何应用正确的字体 编码。
Chunk是可以添加的文本中最重要的部分 到文件。大多数元素可以分为一个或多个块。一个 chunk是一个带有某个Font的String。所有其他布局参数 应该在添加了这块文本的对象中定义。
PdfContentByte和Chunk(Element)用于不同目的。它们没有任何共同点,也没有接口,也没有超类(不包括Object ofc)。
第一个为什么也这样做?
它使用begin开始写入文本并结束完成文本的写入并使当前字体无效。
是否使用beginText和endText?
不,像Chunk和Paragraph这样的元素不使用begin和end。它使用StringBuffer来保存其文本值。
为什么我得到'不平衡开始结束文本操作符'异常?
如果你看一下PdfContentByte's beginText() and endText() sources,你会看到,如果我们在尚未完成时尝试开始文本,或者在文本尚未开始时结束文本,我们将获得此异常。
确保在开始向其添加任何元素之前调用document.open(),在完成文档时调用document.close()。
答案 1 :(得分:0)
在iText中使用高级对象时,您无需担心beginText()
和endText()
方法。看看这个Hello World example。