有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)

书中或谷歌搜索中都没有提到这个问题

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


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    我不认为有任何一种编码适用于所有语言,包括字体嵌入。例如,假设选择UTF-8编码,将字体嵌入设置为true,则会嵌入字体,但不会

    我发现自己不得不这么做,因为我事先不知道文本的语言:

    try {
      // Try to embed the font.
      // This doesn't work for type 1 fonts.
      return FontFactory.getFont(fontFace, BaseFont.IDENTITY_H, 
          true, fontSize, fontStyle, textColor);
    } catch (ExceptionConverter e) {
      return FontFactory.getFont(fontFace, "UTF-8", true, 
          fontSize, fontStyle, textColor);
    }
    

    (由于我使用的是较旧版本的iText 2.1,所以exception类可能会有所不同。)

    与许多iText内容一样,这方面的文档记录很差,使得简单的内容变得不必要的困难