2012-11-21 78 views
5

我使用iText库为额外的信息加盖现有的PDF文件。 额外信息是应以自定义TTF字体呈现的文本。iText嵌入式ttf字体在Adobe Reader中不可见

问题是,文本不是仅在ADOBE READER可见。 其他PDF阅读器(例如Ubuntu中的默认eVince阅读器和Google在线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的声望;-) –