2012-11-21 3 views
5

iText 라이브러리를 사용하여 추가 정보로 기존 PDF 파일을 스탬프 처리하고 있습니다. 추가 정보는 사용자 지정 TTF 글꼴로 렌더링되어야하는 텍스트입니다.Adobe Reader에서 iText embedded ttf 글꼴을 볼 수 없습니다.

텍스트가 Adobe Reader에서만 보이지 않는 문제가 있습니다. Ubuntu의 기본 eVince 리더 및 Google 온라인 PDF 리더와 같은 다른 PDF 뷰어는 맞춤 포함 글꼴의 스탬프 처리 된 텍스트를 잘 렌더링합니다.

나는 그런 CP1251, BaseFont.Identity_H, ... 등 여러 인코딩을 시도

마법이 일어나는 코드 :

PdfReader pdfReader = new PdfReader(new FileInputStream(inputPdf)); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("stamped.pdf")); 
PdfContentByte canvas = pdfStamper.getOverContent(1); 
String text = "The stamp"; 
BaseFont bf = BaseFont.createFont("assign.ttf", "Cp1251",BaseFont.EMBEDDED); 
canvas.beginText(); 
canvas.setColorFill(BaseColor.BLUE); 
canvas.setFontAndSize(bf, 13); 
canvas.moveText(310, 600); 
canvas.showText(text); 
pdfStamper.close(); 
+0

문서> 속성으로 이동하여 글꼴 탭을 열면 무엇을 볼 수 있습니까? 글꼴을 보시겠습니까? –

+0

문제점 : iText의 오래된 버전을 사용하고있는 것 같습니다. –

답변

5

당신은 구문 문제가 있습니다. PDF의 텍스트 상태는 BTET으로 표시됩니다. 이 연산자는 beginText()endText() 메서드를 사용하여 추가됩니다. BT이 있지만 ET은 없습니다. Adobe Reader는 다른 시청자보다 엄격합니다. 그 때문에 내가 다른 모든 시청자보다 Adobe Reader를 선호합니다. 사람들은 코드를 작성할 때 구문을 존중해야합니다.

pdfStamper.close();

canvas.endText(); 

더 나은 전에 다음 줄을 추가 아직 읽어 내 book 당신은 당신이 ColumnText.showTextAligned()를 사용하여 코드의 복잡성을 줄일 수 있습니다 찾을 수 있습니다.

+1

감사합니다. Bruno, 끝 마커는 Adobe Reader에서 문제를 해결했습니다. 멋진 iText 라이브러리에 대한 또한 명성. – nkr1pt

+0

답변을 수락 해 주셔서 감사합니다 : 그것은 나를 2000+ 명성을 얻게했습니다 ;-) –