iText嵌入式ttf字体在Adobe Reader中不可见

nkr*_*1pt 5 pdf acrobat itext truetype adobe-reader

我正在使用iText库为现有PDF文件添加额外信息.额外信息是应以自定义TTF字体呈现的文本.

问题是文本仅在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();
Run Code Online (Sandbox Code Playgroud)

Bru*_*gie 5

你有语法问题.PDF中的文本状态标有BTET.使用beginText()endText()方法添加这些运算符.你有BT,但没有ET.Adobe Reader比其他观众更严格(这就是为什么我更喜欢Adobe Reader而不是所有其他观众:人们在编写代码时应该尊重语法).

之前添加以下行 pdfStamper.close();

canvas.endText();
Run Code Online (Sandbox Code Playgroud)

更好的是,阅读我的,你会发现你可以通过使用来降低代码的复杂性ColumnText.showTextAligned().