2015-01-08 47 views
0

用PdfContentByte在iText中解決此問題。當我嘗試創建新的一頁,我用下面代碼 -com.itextpdf.text.exceptions.IllegalPdfSyntaxException:不平衡的開始/結束文本運算符

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


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

      setUpperFontAndSize(canvas); 
      canvas.beginText(); 

的問題是在調用ENDTEXT時發生()。有沒有解決方案?

+0

可您創建畫布'canvas.endText POST代碼( );'? –

+0

拋出異常是因爲否則將創建一個包含非法語法的PDF,如以下問題所示:[使用itextsharp生成的PDF在第一次打印命令時給出錯誤](http://stackoverflow.com/questions/21301497/pdfs-generated-using-itextsharp-giving-error-at-the-the-the-time-of-first-print-command)這是一個爲[StackOverflow上的最佳iText問題]選擇的問題(https:// leanpub。 COM/itext_so)。 –

回答

3

的OP說

問題是在調用ENDTEXT時發生()

根據該方法的源代碼,所討論的異常指示沒有匹配之前打電話給beginText()

的文本對象開始於BT操作者並與ET操作結束時,如圖所示的實施例,並且在表107.

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

...文本對象不能靜態嵌套...

+0

啊,我們幾乎同時回答;-) –

+0

謝謝@mkl。問題已解決。 –

+0

@BrunoLowagie;)幸運的是'IllegalPdfSyntaxException:不平衡的開始/結束文本運算符'比'IllegalPdfSyntaxException:非平衡的保存/恢復狀態運算符'更容易評估... – mkl

2

您的代碼片段不完整。我們看到,您使用:

canvas.endText(); 

因此,該聲明是非法的,這是正常的,你得到一個例外,因爲你只能使用endText()你第一次使用後:

canvas.beginText(); 

在您的代碼段中,我們只看到beginText()之後您已觸發endText()

另外要注意,一個BT/ET文本對象頁上的「生活」(您在介紹beginText()/endText()序列創建一個對象)。文本對象不能「跨越」多個頁面。

舉例來說,這將是非法的:

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

BT/ET對應該在同一頁面上出現:

canvas.beginText(); 
// do stuff 
canvas.endText(); 
document.newPage(); 
相關問題