【问题标题】:apache pdfbox-PDType1Font (HELVETICA) encodeapache pdfbox-PDType1Font (HELVETICA) 编码
【发布时间】:2017-03-23 03:38:03
【问题描述】:

我的日志

异常是 java.lang.IllegalArgumentException: U+0009 ('controlHT') is not available in this font Helvetica (generic: ArialMT) encoding: WinAnsiEncoding] 根本原因 java.lang.IllegalArgumentException: U+0009 ('controlHT') is not available in this font Helvetica (generic: ArialMT) encoding: WinAnsiEncoding

【问题讨论】:

  • 您只是尝试绘制一个字体不包含字形的字符。在您的情况下,它是一个控制字符,即水平制表符,几乎没有任何字体具有字形。
  • 为什么标题提到了NullPointerException,而正文却提到了IllegalArgumentException?
  • @marwn 很高兴您从标题中删除了 NPE,但您也可以对这里的其他 cmets 做出反应吗?毕竟他们确实解释了为什么你的异常会发生。这些信息是否已经让您解决了问题,或者您仍然有问题?

标签: java pdfbox


【解决方案1】:

异常信息

U+0009 ('controlHT') 在此字体中不可用 Helvetica(通用:ArialMT)编码:WinAnsiEncoding

表示您绘制的字符串包含字体(特别是在其选定的编码中)不提供字形绘制指令的字符。

它甚至指出哪个字符是罪魁祸首:“U+0009 ('controlHT')”,即控制字符,水平制表符。事实上,必须避免控制字符,因为几乎没有任何字体会包含它们的字形。

正如您已经在 cmets 中确认您的问题

string.replaceAll("\t", " ") 对我来说很好用

所以水平制表符似乎是唯一有问题的字符。

【讨论】:

  • 到目前为止水平选项卡是什么导致问题,但我不知道 string.replaceAll("\t", " ") 是否是空闲的解决方案,因为我必须检查我正在绘制的每个字符串pdf..
  • @marwn 好吧,如果您可以确保您从中检索这些字符串的源仅提供具有可绘制字符的字符串,那将会更容易。但是,由于您没有说明从哪里获得它们,因此我几乎无法准确猜出如何做到这一点。
  • 我的字符串源是从数据库中检索的,大部分是从表单中插入的..
  • 那么我建议对表单输入进行消毒。不应将控制字符写入数据库字段以供您使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
相关资源
最近更新 更多