我使用这个网站的源代码来创建一个新的 PDF 文件,它可以工作。
问题是我在PDFWriteDemo.java中写中文的时候: mPDFWriter.addText(70, 50, 12, "各位好"); ,无法正常显示PDF文件中的字符。
相反,它显示???
.
尝试更改此行:
outputToFile("helloworld.pdf",pdfcontent,"ISO-8859-1");
至:
outputToFile("helloworld.pdf",pdfcontent,"UTF-8");
考虑到可能是编码问题,您需要按照以下顺序更改字体和编码:
首先我们发现在 中PDFWriterDemo.java
,这一行定义了 Font 和 encoding:
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标准字体以呈现中文字符和正确的编码。