2015-01-08 2 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'에 캔버스를 만들 수 코드를 게시 할 수 있습니다

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

BT/ET 쌍은 같은 페이지에서 발생한다); '? –

+0

다음 질문에 설명 된 것처럼 잘못된 구문을 포함하는 PDF를 만들려고하기 때문에 예외가 throw됩니다. [첫 번째 인쇄 명령시 itextsharp를 사용하여 생성 된 PDF가 오류를 발생시킵니다] (http://stackoverflow.com/questions/21301497)/pdfs-generated-itextsharp-giving-the-first-print-command-using-the-first-print-command)이 질문은 [The Best iText Questions on StackOverflow] (https : // leanpub. co.kr/itext_so). –

답변

3

영업 문제가 endText 호출시에 발생

말한다()

메소드의 소스 코드에 따라, 당해 예외 일치가 없다고 나타낸다 beginText() 전화 전에.

텍스트 객체는 BT 연산자로 시작하고 실시 예에 도시 한 표 107

BT 
…Zero or more text operators or other allowed operators… 
ET 
에서 설명한대로 ET 연산자 끝나는

... 텍스트 개체를 정적으로 중첩 할 수 없습니다.

+0

아, 우리는 거의 동시에 대답했습니다 ;-) –

+0

Thanks @mkl. 문제가 해결되었습니다. –

+0

@BrunoLowagie;) 다행히도'IllegalPdfSyntaxException : 불균형 한 begin/end 텍스트 연산자'가'IllegalPdfSyntaxException : Unbalanced save/restore state operators'보다 평가하기 쉽습니다. – mkl

2

코드 스 니펫이 완료되지 않았습니다. 우리는 당신이 사용하는 참조 : 이와 같이

canvas.endText(); 

, 그 진술은 불법이며 먼저 사용 후에 만 ​​endText()를 사용할 수 있기 때문에, 당신은 예외를 얻을 정상입니다 :

canvas.beginText(); 

에서 코드 단편, beginText()이후 다음에 endText()이 발생했습니다.

또한 인식하는 BT/ET 텍스트 객체 페이지의 "삶"(당신이 beginText()/endText() 순서를 소개 할 때 사용자가 만든 객체). 텍스트 개체는 여러 페이지를 "확장"할 수 없습니다.

예를 들어,이 불법이 될 것입니다 : (

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