如何使用apache pdf框将“非破坏空间”打印到pdf?

时间:2017-12-22 15:59:34

标签: java pdfbox

final String NBSP = new String("\u00a0");
contentStream.showText("Konichua!" + NBSP);

这会引发以下异常:

  

java.lang.IllegalArgumentException:U + 00A0('nbspace')不是   以此字体提供Courier编码:WinAnsiEncoding

我已经尝试了所有可用的3种字体; TimesNewRoman,Courier& Helvitica与所有3个导致相同的例外。

但是当您查看apcahe pdfBox的源代码中的 WIN_ANSI_ENCODING_TABLE 时,

    {040, "space"},
    {0243, "sterling"},
     .
     .

    // adding some additional mappings as defined in Appendix D of the pdf spec
    {0240, "space"},
    {0255, "hyphen"}

我们可以看到下面的非中断空间已定义。

DEC     OCT     HEX     BIN       Symbol     Description
160    240      A0      10100000              Non-breaking space

在pdf规范document中 引用如下:

  

SPACE字符在MacRomanEncoding中也应编码为312,在WinAnsiEncoding中编码为240   。此重复代码应表示不间断的空间;它的排版方式应与(U + 003A)SPACE相同。

用例:

通过使用NBSP添加填充来增加标头txt列的宽度,以便在标题列上调用string.trim()时不会删除它。

1 个答案:

答案 0 :(得分:0)

  

"它的排版方式应与(U + 003A)SPACE"相同。

所以它没有nbs / nbspace。通过致电PDType0Font.load(document, new File("..."))获取您的字体。

顺便说一句,在字符串上调用new String()并不是一个好主意。