gpt4 book ai didi

java - 如何忽略 PDFBox 2.0.7 使用的字体中缺失的字形

转载 作者:行者123 更新时间:2023-11-30 06:29:22 35 4
gpt4 key购买 nike

我看到调用 PDFPageContentStream 的 showText(String) 方法时抛出“java.lang.IllegalArgumentException:字体中没有 U+05D0 的字形”(作为示例)异常。

捕获异常并不是很有帮助,因为好的字符不会被写出来。也不会检查输入字符串中的每个字符,这会成为性能 killer (每个 PDF 可能有数千页、数百万个字符)。我真正需要的是一种方法来防止任何丢失字形的异常,并自动将其替换为其他字形,或者动态创建的显示 unicode 值的字形。

我不想因为字体不支持特定字形而停止生成 PDF,我只想使用一些替换字符并继续。

如何实现这一目标?

最佳答案

这就是我所做的

private final char[] replacements = IntStream.range(0, 1<<16)
.map(c -> canRender(font, c) ? c : "?")
.collect(StringBuilder::new, StringBuilder::appendCodePoint,
StringBuilder::append)
.toString().toCharArray();

// This is extremely ugly!!!
private boolean canRender(PDType0Font font, int codepoint) {
try {
font.getStringWidth(new String(Character.toChars(codepoint)));
return true;
} catch (final Exception e) {
return false;
}
}

String sanitize(String input) {
return input.codePoints()
.map(c -> c<replacements.length ? replacements[c] : '?')
.collect(StringBuilder::new, StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();

我认为,不值得优化,因为在 PDF 生成过程中,还需要做更多工作,包括 hasGlyph 测试。

关于java - 如何忽略 PDFBox 2.0.7 使用的字体中缺失的字形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46439548/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com