PDFBOX:U+000A ('controlLF') 在此字体中不可用 Helvetica 编码:WinAnsiEncoding

PDFBOX : U+000A ('controlLF') is not available in this font Helvetica encoding: WinAnsiEncoding

尝试使用 Java 和 org.apache.pdfbox 库打印 PDF 页面时,出现此错误:

PDFBOX : U+000A ('controlLF') is not available in this font Helvetica encoding: WinAnsiEncoding

[问题] 您尝试显示的字符串包含换行符。

[解决方案] 将字符串替换为新字符串并删除换行符:

text = text.replace("\n", "").replace("\r", "");

如果您尝试在字符串中使用“\n”设置新行。你可以尝试 PDPageContentStream.newLineAtOffset(x,y) 添加一个新行

  PDFont font =  PDType1Font.HELVETICA ; 

  PDDocument doc    = new PDDocument();
  PDPage page = new PDPage();
  PDPageContentStream content = new PDPageContentStream(doc, page);
  content.beginText();
  content.moveTextPositionByAmount(10, 700);
  content.setFont(font, 12);
  content.drawString("start text   ");
  content.newLineAtOffset(0, -15);
  content.drawString("text in new line  ");        
  content.endText();
  content.close();
  doc.addPage(page);
  doc.save("file.pdf");

和 pdf

有时您必须更改字体,例如:

PDFont font = PDType0Font.load(document, new File("C:\Users\dw\Desktop\FZLTXHJW.TTF"));

将 "FZLTXHJW.TTF" 替换为您拥有的字体,它应该支持您的文本编码。

如果你想保留换行符,即你确实希望你的文本拆分并出现在新行的后面部分,那么你可以简单地替换 \n 带有 HTML break 标签,如下所示 .

return text.replace("\n","<br>");

:)

为此 post 选择的答案有效,替换了字符串中所有 \n 和 \r 的实例,如果您知道是 \n 或 \r 字符导致了您的问题。我发现有很多不同的字符会产生此错误。以下是我发现的示例:

U+2010 ('hyphentwo') is not available in this font Helvetica encoding: WinAnsiEncoding
U+2033 ('second') is not available in this font Helvetica encoding: WinAnsiEncoding
U+00A0 ('nbspace') is not available in this font Helvetica encoding: WinAnsiEncoding
U+FFFD ('.notdef') is not available in this font Helvetica encoding: WinAnsiEncoding
U+03BC ('mugreek') is not available in this font Helvetica encoding: WinAnsiEncoding
U+039C ('Mu') is not available in this font Helvetica encoding: WinAnsiEncoding
U+2212 ('minus') is not available in this font Helvetica encoding: WinAnsiEncoding
U+0141 ('Lslash') is not available in this font Helvetica encoding: WinAnsiEncoding
U+2103 ('centigrade') is not available in this font Helvetica encoding: WinAnsiEncoding
U+25AA ('H18543') is not available in this font Helvetica encoding: WinAnsiEncoding

就我而言,我只是选择删除未包含在我的字体中的任何特殊字符。我使用了此页面中的解决方案:

https://cmsdk.com/java/remove-illegal-characters-from-string-with-pdfbox.html

我也 运行 遇到了类似的问题(使用 pdfbox 2.0.11),我的错误是:

U+00A0 ('nbspace') is not available in this font Helvetica encoding: WinAnsiEncoding

这很奇怪,因为检查字符名称(int 值 160)的 WinAnsiEncoding 返回 space,但 pdfbox 的内部 类 返回名称 nbspace

我的解决方案是升级到 pdfbox 2.0.21。