U + FFFD在此字体的编码中不可用:WinAnsiEncoding

滴滴涕

我正在使用PDFBox 2.0.1。

我尝试将一些(用户提供的)UTF8文本动态添加到表单字段中,并将结果显示给用户。不幸的是,pdf库无法正确编码特殊字符(例如“äöü”)...,或者我找不到任何有用的文档来帮助解决此问题。

有人可以告诉我给定代码示例的问题吗?

try (PDDocument document = PDDocument.load(pdfTemplate)) {
    PDDocumentCatalog catalog = document.getDocumentCatalog();
    PDAcroForm form = catalog.getAcroForm();

    List<PDField> fields = form.getFields();
    for (PDField field : fields) {
        switch (field.getPartialName()) {
            case "devices":
                // Frontend (JS): userInput = btoa('Gerät')
                String userInput = ...
                String name = new String(Base64.getDecoder().decode(base64devices), "UTF-8");
                field.setReadOnly(true);
                break;
        }
    }
    form.flatten(fields, true);
    document.save(bos);
}

这里是错误的堆栈跟踪:

java.lang.IllegalArgumentException: U+FFFD is not available in this font's encoding: WinAnsiEncoding
    org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.encode(PDTrueTypeFont.java:368)
    org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:286)
    org.apache.pdfbox.pdmodel.font.PDFont.getStringWidth(PDFont.java:315)
    org.apache.pdfbox.pdmodel.interactive.form.PlainText$Paragraph.getLines(PlainText.java:169)
    org.apache.pdfbox.pdmodel.interactive.form.PlainTextFormatter.format(PlainTextFormatter.java:182)
    org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.insertGeneratedAppearance(AppearanceGeneratorHelper.java:373)
    org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceContent(AppearanceGeneratorHelper.java:237)
    org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceValue(AppearanceGeneratorHelper.java:144)
    org.apache.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:263)
    org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm.refreshAppearances(PDAcroForm.java:324)
    org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm.flatten(PDAcroForm.java:213)
    my.application.service.PDFService.generatePDF(PDFService.java:201)

我还在SO上发现了这些(相关)问题:

pdfbox:...在此字体的编码中不可用,但这无助于我选择正确的编码或编码方式。IIRC Java内部使用UTF16进行字符编码,为什么默认值还不够?这是PDF文档本身的问题还是我用来设置它的代码?


PdfBox编码符号货币euro很好的动态用户输入,因此有很多方法可以替代我自己。

因此,如果PDFBox的人们决定修复损坏的PDFBox方法,则此看似干净的变通方法代码将开始失败,因为它随后将向固定的方法提供损坏的输入数据。

诚然,我怀疑他们会在2.0.0之前解决此错误(在2.0.0中,固定方法的名称有所不同),但永远不会知道...

不幸的是,我找不到其他的setter方法,但它可能也适用于其他范围。

编辑

更新了示例代码以更好地表示问题。

西蒙妮·隆德利

U + FFFD用于替换其值在Unicode中未知或无法表示的传入字符,将U + 001A用作控制字符以表示替代函数()。

那就是说那个角色很可能被弄乱了。也许文件的编码不是UTF-8,这就是字符混乱的原因。

通常,您应该只在源代码中写入ASCII字符。您仍然可以使用转义的\ uXXXX表示整个Unicode范围。在这种情况下ä-> \u00E4

-更新-

显然,问题在于如何使用JS函数从客户端/服务器端对用户输入进行编码/解码btoa可以在以下链接中找到此问题的解决方案:

使用Javascript的atob解码base64不能正确解码utf-8字符串

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

U + 0151('odblacute')在该字体Times-Roman编码中不可用:WinAnsiEncoding

来自分类Java

PDFBOX:U + 000A( 'controlLF')不是在该字体黑体编码可用的:WinAnsiEncoding

来自分类Dev

Java SE 6u28在存档中不可用下载

来自分类Dev

如何解决“ ...此字体的编码中不可用”?

来自分类Java

为什么jdk-7u80之后Java 7版本不可用?

来自分类Java

PDFBox的U + 00A0是不是在这个字体的编码可用

来自分类Dev

Appengine:“ URLFetch在此环境中不可用。”

来自分类Dev

Compute Engine:URLFetch 在此环境中不可用

来自分类Dev

URLFetch在此环境中不可用-cx_Freeze

来自分类Dev

REST接口功能在此Bugzilla中不可用

来自分类Dev

为什么在此示例中变量范围不可用

来自分类Dev

是否可以创建可用作T [A,B]的泛型T [A <:C [U],B <:C [U],U]?

来自分类Python

pip install -U中的“ -U”选项代表什么

来自分类Dev

如何在&[u8]中编写u32?

来自分类Dev

XXX<U, in T: U> 在 kotlin 中是什么意思

来自分类Dev

变量声明中的U后缀

来自分类Dev

在json列表中删除u'

来自分类Dev

从python列表中删除'u'

来自分类Dev

在POSTMAN中添加Curl -u

来自分类Dev

从webscrape输出中删除'u

来自分类Dev

Jaspersoft 中使用的字体在 JVM 中不可用

来自分类Dev

在 Rust 中在 extprim::u128::u128 和原始 u128 之间转换?

来自分类Dev

什么编码类似于“ \ u0441 \”?

来自分类Dev

使用PowerShell搜索特殊字符U + FFFD(65533)

来自分类Dev

PDFBox:提取的字体中没有 U+0050 的字形

来自分类Dev

这是什么类型的编码?\ u00e2 \ u0098 \ u0085应该翻译成★

来自分类Dev

rmarkdown pdf字体不可用

来自分类Dev

SQL Server中的模式U锁定

来自分类Dev

如何:sudo -u <username> 在 sudoer 中?

Related 相关文章

热门标签

归档