java itext字体不支持HarsetException
我试图在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)
书中或谷歌搜索中都没有提到这个问题
关于我可能遗漏的内容,有什么建议吗
# 1 楼答案
正如您可能从两位Michaels的回答中理解的那样,您错误地认为标准的Type1字体Times Roman和
IDENTITY_H
是兼容的。如果要使用IDENTITY_H
,必须更改字体;如果要使用标准的1型字体,必须更改编码(在这种情况下,使用BaseFont.EMBEDDED
没有意义,因为标准的1型字体从未嵌入)。如果我在书中没有提到这一点,我很抱歉。我觉得这有点微不足道。可以从我写的关于复合字体的文章中推断出来# 2 楼答案
我不认为有任何一种编码适用于所有语言,包括字体嵌入。例如,假设选择UTF-8编码,将字体嵌入设置为true,则会嵌入字体,但不会
我发现自己不得不这么做,因为我事先不知道文本的语言:
(由于我使用的是较旧版本的iText 2.1,所以exception类可能会有所不同。)
与许多iText内容一样,这方面的文档记录很差,使得简单的内容变得不必要的困难