Nbspace 不可用
Nbspace not available
我正在使用 pdfbox 2.0.9
我有一个 pdf with acrofrom only,我想将 nbspace 字符设置为一个字段:
field.setValue("\u00A0");
但我得到错误:
java.lang.IllegalArgumentException: U+00A0 ('nbspace') is not available in this font Courier encoding: WinAnsiEncoding
我了解当前字段的字体不支持这些字符。
如何使用 pdfbox2.0.14 在我的 pdf 上获取可用的 pdf 字体列表?
这个主题可能与此相关
PDF 中的文本字段使用字体 Helv。
AcroForm 资源字体 Helv 使用以下编码定义:
5 0 obj
<<
/Type/Encoding
/Differences[
24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek/ring/tilde
39/quotesingle
96/grave
128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin/fraction
/guilsinglleft/guilsinglright/minus/perthousand/quotedblbase/quotedblleft
/quotedblright/quoteleft/quoteright/quotesinglbase/trademark/fi/fl/Lslash
/OE/Scaron/Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron
160/Euro
164/currency
166/brokenbar
168/dieresis/copyright/ordfeminine
172/logicalnot/.notdef/registered/macron/degree/plusminus/twosuperior
/threesuperior/acute/mu
183/periodcentered/cedilla/onesuperior/ordmasculine
188/onequarter/onehalf/threequarters
192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute
/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde
/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
]
>>
endobj
由于没有为该字体嵌入字体程序,该编码基于StandardEncoding。此基本编码不包含不间断的 space。此外,您的 Differences 数组也不会添加 nbspace。
因此,您不能使用该编码绘制不间断的 space,因此,也不能使用该 Helv 字体。
据我所知,PDFBox 在这种情况下不提供替换字体,即如果在设置包含表单字段默认外观字体编码中不支持的字符的值时要求创建新的文本字段外观.
一个解决方法可能是不要求 PDFBox 生成外观,而是用 NeedAppearances 标记 AcroForm值 true,并希望以后的 PDF 处理器/查看器在这种情况下确实使用替换字体。不能保证这有效,可能需要外观的下一个处理器也不提供替换字体。尽管如此,至少有机会这样做...
不过,取决于 PDFBox 的确切版本,
field.setValue(value);
可能总是会触发外观生成。如果是这种情况,您必须像这样设置字段值
field.getCOSObject().setString(COSName.V, value);
我正在使用 pdfbox 2.0.9
我有一个 pdf with acrofrom only,我想将 nbspace 字符设置为一个字段:
field.setValue("\u00A0");
但我得到错误:
java.lang.IllegalArgumentException: U+00A0 ('nbspace') is not available in this font Courier encoding: WinAnsiEncoding
我了解当前字段的字体不支持这些字符。
如何使用 pdfbox2.0.14 在我的 pdf 上获取可用的 pdf 字体列表?
这个主题可能与此相关
PDF 中的文本字段使用字体 Helv。
AcroForm 资源字体 Helv 使用以下编码定义:
5 0 obj
<<
/Type/Encoding
/Differences[
24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek/ring/tilde
39/quotesingle
96/grave
128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin/fraction
/guilsinglleft/guilsinglright/minus/perthousand/quotedblbase/quotedblleft
/quotedblright/quoteleft/quoteright/quotesinglbase/trademark/fi/fl/Lslash
/OE/Scaron/Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron
160/Euro
164/currency
166/brokenbar
168/dieresis/copyright/ordfeminine
172/logicalnot/.notdef/registered/macron/degree/plusminus/twosuperior
/threesuperior/acute/mu
183/periodcentered/cedilla/onesuperior/ordmasculine
188/onequarter/onehalf/threequarters
192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute
/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde
/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
]
>>
endobj
由于没有为该字体嵌入字体程序,该编码基于StandardEncoding。此基本编码不包含不间断的 space。此外,您的 Differences 数组也不会添加 nbspace。
因此,您不能使用该编码绘制不间断的 space,因此,也不能使用该 Helv 字体。
据我所知,PDFBox 在这种情况下不提供替换字体,即如果在设置包含表单字段默认外观字体编码中不支持的字符的值时要求创建新的文本字段外观.
一个解决方法可能是不要求 PDFBox 生成外观,而是用 NeedAppearances 标记 AcroForm值 true,并希望以后的 PDF 处理器/查看器在这种情况下确实使用替换字体。不能保证这有效,可能需要外观的下一个处理器也不提供替换字体。尽管如此,至少有机会这样做...
不过,取决于 PDFBox 的确切版本,
field.setValue(value);
可能总是会触发外观生成。如果是这种情况,您必须像这样设置字段值
field.getCOSObject().setString(COSName.V, value);