使用ByteArrayOutputStream的UTF-8编码

时间:2019-03-28 10:35:00

标签: java encoding utf-8 itext

我遇到非英语字符的字符编码问题。在这里,我正在使用itext库生成pdf。

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Document document = new Document();
document.setMargins(-50.0f, -50.0f, 15.0f, 0.0f);
PdfWriter.getInstance(document, byteArrayOutputStream);
document.open();

-----

myObj.setByteArrayInputStream(new byteArrayInputStream(byteArrayOutputStream.toByteArray()));

我尝试了以下代码

myObj.setByteArrayInputStream(new ByteArrayInputStream(byteArrayOutputStream.toString("UTF-8").getBytes()));

1 个答案:

答案 0 :(得分:1)

在设计PDF时,编码和字体之间的耦合太紧密了,按照今天的标准,非西方文本不必要地难以使用。

您的代码中的问题很可能比仅最终输出流的编码更为根本。已经正确指出PDF是二进制格式。因此,请勿尝试在输出流中引入任何编码。

相反,请看一下iText字体示例,例如https://itextpdf.com/en/resources/examples/itext-7/itext-7-building-blocks-chapter-1-examples-pdffont,尤其是在处理外国文字并使用PdfEncodings.IDENTITY_H的示例中。

如果仍然有问题,请在问题中添加相关代码,尤其是设置字体并将文本添加到PDF页面的代码。