【发布时间】: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 提到 Adobe-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