java - itext 字体 UnsupportedCharsetException

标签 java character-encoding fonts itext

我正在尝试在 Java Web 应用程序中使用 iText(5.4.0 版)创建 pdf 文档,但遇到了字体问题。

Web 应用程序是多语言的,因此用户可以使用各种语言(例如英语、法语、立陶宛语、中文、日语、阿拉伯语等)将信息保存到系统中。

当我尝试配置 pdf 以输出一些示例日文文本时,它没有显示出来,所以我开始按照官方“iText in Action”书中的示例进行操作。我遇到的问题是,当我尝试使用 BaseFont.IDENTITY_H 编码配置字体时,出现以下错误:

java.nio.charset.UnsupportedCharsetException: Identity-H
    at java.nio.charset.Charset.forName(Charset.java:505)
    at com.itextpdf.text.pdf.PdfEncodings.convertToBytes(PdfEncodings.java:186)
    at com.itextpdf.text.pdf.Type1Font.<init>(Type1Font.java:276)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:692)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:615)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:450)

书中或谷歌搜索均未提及此问题。

关于我可能遗漏的内容有什么建议吗?

最佳答案

正如您从两位 Michael 的回答中了解到的那样,您错误地假设标准 Type 1 字体 Times Roman 和 IDENTITY_H 是兼容的。如果要使用 IDENTITY_H,则必须更改字体;如果要使用标准 Type 1 字体,则必须更改编码(在这种情况下使用 BaseFont.EMBEDDED 没有意义,因为从不嵌入标准 Type 1 字体)。如果我没有在我的书中提到这一点,我很抱歉。我认为这有点微不足道。可以从我写的关于复合字体的文章中推导出来。

关于java - itext 字体 UnsupportedCharsetException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15572273/

相关文章:

Java, MongoDB : How to update every object while iterating a huge collection?

java - 如何在传递它的原始方法中访问修改后的 StringBuilder

java - CloudEndpoints : what is autogenerated "patch" API method and how to use it?

mysql - utf8mb4_0900_ai_ci 是 MySQL 8.0.30 中通用的良好排序规则吗?

javascript - 如何在 Javascript 中获取字符的 Unicode 代码点?

java - Guava 是否有等效于 Python 的 reduce 函数?

encoding - 为什么会有不同的编码类型?

android - 为 textview 提供 Resources$NotFoundException 的自定义 fontFamily

html - 字体未在 HTML 中应用

css - 自定义网站字体在 Mac 设备上看起来很奇怪