【问题标题】:How to use asian font (specifically STSongStd-Light) with apache pdfbox to generate a pdf document?如何在 apache pdfbox 中使用亚洲字体(特别是 STSongStd-Light)来生成 pdf 文档?
【发布时间】:2023-01-14 01:26:41
【问题描述】:

我在 Java 中有一段现有代码,使用旧版本的第三方库 iText 生成带有亚洲文本的 pdf,使用亚洲字体。

BaseFont baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", NOT_EMBEDDED);
content.setFontAndSize(baseFont, 15);

我现在想使用 apache pdfbox 做同样的事情,因为 iText 需要许可等。 有谁知道这是否可以使用 apache pdfbox 实现?

到目前为止,我发现 https://github.com/adobe-type-tools/Adobe-GB1#since-the-2000-11-30supplement-4version 提到 Adob​​e-GB1 支持 StSong 字体,并且还发现这个名为 getCIDFont https://pdfbox.apache.org/docs/2.0.13/javadocs/org/apache/pdfbox/pdmodel/font/FontMapper.html 的方法可能能够做到这一点。但是,我不能完全弄清楚如何做到这一点。

# Not sure how these dictionaries should look like?
COSDictionary type0fontdescriptor = new COSDictionary();
COSDictionary fontdescriptor = new COSDictionary();
PDCIDFontType2 pdcidFontType2 = new PDCIDFontType2(fontdescriptor, new PDType0Font(type0fontdescriptor), null);
TrueTypeFont ttf = pdcidFontType2.getTrueTypeFont();
# Not sure what encoding should be used
PDFont font = PDTrueTypeFont.load(document, ttf, Encoding.getInstance(COSName.STANDARD_ENCODING));

我还在https://github.com/asmpg/AwesomeUtils/blob/master/src/main/java/com/asomepig/tika/STSong-Light.ttf 找到了这种字体的 ttf 文件。不确定我们是否需要任何许可才能使用它。但是,即使我尝试加载 ttf 以查看我们是否可以渲染,也会抛出这样的异常。

PDFont font =
        PDTrueTypeFont.load(
            document,
            new File(basePath + "ttfs/STSong-Light.ttf"),
            Encoding.getInstance(COSName.STANDARD_ENCODING));

Exception in thread "main" java.io.IOException: head is mandatory
    at org.apache.fontbox.ttf.TTFParser.parseTables(TTFParser.java:197)
    at org.apache.fontbox.ttf.TTFParser.parse(TTFParser.java:165)
    at org.apache.fontbox.ttf.TTFParser.parse(TTFParser.java:91)
    at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.load(PDTrueTypeFont.java:93)

有谁知道在 apache pdfbox 中使用 StSong 字体的最佳方法是什么?有可能吗?

【问题讨论】:

  • 那不是 TrueType 字体。

标签: java pdf itext pdf-generation pdfbox


【解决方案1】:

来自https://www.wfonts.com/font/stsong 的字体有效。

PDFont font = PDType0Font.load(document, new File("//path/to/ttf/chinese.stsong.ttf"));

无法从 https://en.wikipedia.org/wiki/List_of_CJK_fonts 找到任何许可信息。

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 2016-09-19
    • 2015-03-23
    • 2021-05-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多