【发布时间】:2017-07-15 10:03:33
【问题描述】:
我正在从 UTF-8 的用户输入创建 PDF 文档。
除了显示 PDF 之外,创建本身也会失败并显示 java.lang.IllegalArgumentException: U+039B is not available in this font's encoding: WinAnsiEncoding。
这里的大多数答案都指向“使用具有更好 UTF-8 支持的字体”,但由于我无法控制用户输入,因此这种 UTF-8 支持永远不够好,我需要一个防弹解决方案(就像打印一些东西而不是错误输出)。
答案Using PDFBox to write unicode strings to a PDF 建议在将文本添加到 PDF 之前对其进行清理。
问题是我找不到有效的例子来实现这一点。
所有示例似乎都指向已删除的代码(font.setToUnicode或某种编码方法,一次转换一个字符)。
所以简而言之,我有一个字符串,我想要一个防弹方法将大部分写入 PDFBox 文档(显然,字体中缺少的字符将被替换或不打印)。
非常感谢, 杰姆
【问题讨论】:
-
您使用哪个 PDFBox 版本?正如您所指的答案所指出的,1.8.x 和 2.0.x 版本的情况不同
-
我使用的是 2.0.3(最后发布的)。
-
您使用哪种字体?你如何使用它? Pdfbox 2.0.x 允许您嵌入包含所需字形的字体子集。
-
@mkl 是的,我尝试使用 Ubuntu 字体,这在一定程度上改进了一些东西,但它永远不够好,因为我无法提前知道将打印哪些字符。我正在打印作为用户输入的文本,基本上他们可以访问整个 UTF-8 集。有没有办法知道字体中的字形是什么代码点?那将是非常低效的,但我可以扫描所有字符串并用place hlder替换丢失的字符......
-
stackoverflow.com/a/31424164/3977077 这对删除不可打印字符很有帮助
标签: java pdf encoding utf-8 pdfbox