com.itextpdf.text.exceptions.IllegalPdfSyntaxException:不平衡的 begin/end 文本运算符

com.itextpdf.text.exceptions.IllegalPdfSyntaxException: Unbalanced begin/end text operators

使用 PdfContentByte 在 iText 中努力解决这个问题。当我尝试创建新页面时,我使用以下代码-

           canvas = writer.getDirectContent();
           canvas.saveState();


           canvas.stroke();
           canvas.restoreState();
         ...
            canvas.endText();
            itextDocument.newPage();

            setUpperFontAndSize(canvas);
            canvas.beginText();

问题出现在调用 endText() 时。有什么解决办法吗??

OP 说

The issue is occurring at the time of calling endText()

根据该方法的源代码,该异常表明之前没有匹配的 beginText() 调用。

A text object begins with the BT operator and ends with the ET operator, as shown in the Example, and described in Table 107.

EXAMPLE

BT
…Zero or more text operators or other allowed operators…
ET

... text objects cannot be statically nested ...

您的代码片段不完整。我们看到您使用:

canvas.endText();

因此,该语句是非法的,你得到一个异常是正常的,因为你只能在你第一次使用后使用 endText():

canvas.beginText();

在您的代码段中,我们只看到 beginText() 在您触发 endText().

之后

另请注意,BT/ET 文本对象(在引入 beginText()/endText() 序列时创建的对象)"lives" 在一页上。一个文本对象不能 "span" 多个页面。

例如,这将是非法的:

canvas.beginText();
// do stuff
document.newPage();
canvas.endText();

BT/ET 对应该出现在同一页上:

canvas.beginText();
// do stuff
canvas.endText();
document.newPage();