我使用this website中的源代码创建一个新的PDF文件,它可以正常工作。
问题是当我在PDFWriteDemo.java中写中文时:mPDFWriter.addText(70,50,12,“各位好”); ,它无法正常显示PDF文件中的字符。
相反,它会显示???
。
答案 0 :(得分:0)
尝试更改此行:
outputToFile("helloworld.pdf",pdfcontent,"ISO-8859-1");
为:
outputToFile("helloworld.pdf",pdfcontent,"UTF-8");
考虑到它可能是编码问题,您需要按照这些顺序更改字体和编码:
首先我们发现在PDFWriterDemo.java
中,此行定义了字体和编码:
mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER, StandardFonts.WIN_ANSI_ENCODING);
其中mPDFWriter
是在PDFWriter.java
中定义的类。
正如您在PDFWriter.java
中看到的那样,有一种方法:
public void setFont(String subType, String baseFont, String encoding) {
mCurrentPage.setFont(subType, baseFont, encoding);
}
其中mCurrentPage
是Page.java
此处Page.java
public void setFont(String subType, String baseFont, String encoding) {
IndirectObject lFont = mDocument.newIndirectObject();
mDocument.includeIndirectObject(lFont);
lFont.setDictionaryContent(" /Type /Font\n /Subtype /" + subType + "\n /BaseFont /" + baseFont + "\n /Encoding /" + encoding + "\n");
mPageFonts.add(lFont);
}
然后你会发现实际上他们并没有将字体嵌入到包中,只是提供字体的名称,并且PDF阅读器的编码正确,会自动加载它们。
因此,我认为解决方案是编辑StandardFonts.java
以添加PDF标准字体以呈现中文字符和正确的编码。