也许这是一个重复的查询,但我不知道该如何解决这个问题?
我提到了所有可用的线程,但无法继续进行。我正在使用PDFBox来绘制字符串。 [pt上标字符也适用于所有特殊字符。)我想写的PDF是“90000039-PREDISOL®CYELLOW 13 SNDOT™M”,但实际上写的是 “þÿ9 0 0 0 0 0 3 9 - P R E D I S OL®CY E L L O W 1 3 S N D O T!” M“
有些人可以帮我详细说明如何识别这种编码方式以及如何处理?
此外,还有其他选项,以便我们可以避免明确地通过文件加载ttf。
谢谢&问候, 阿奇纳
答案 0 :(得分:0)
正如this answer中已经解释的那样, PDFBox的字符串编码远非完美(版本1.8.x)。不幸的是,它在编码通用PDF对象中的字符串时使用相同的例程,就像在内容流中编码字符串那样从根本上是错误的。
根据该答案,可以手动为特殊字符创建文本绘图命令:
contents.drawString("90000039-PREDISOL ® C YELLOW 13 SNDOT"); byte[] commands = "(x) Tj ".getBytes(); commands[1] = (byte) 0231; contents.appendRawCommands(commands); contents.drawString("M");
(DrawSpecialCharacters方法
testDrawTmSignCustomDraw
)
由于所讨论的特殊字符本质上是一组上标的普通字符,因此可以使用较小字体的字母来绘制它,并使用一些文字上升:
contents.drawString("90000039-PREDISOL ® C YELLOW 13 SNDOT"); contents.appendRawCommands("\n6 Ts\n".getBytes()); contents.setFont(font, 10); contents.drawString("TM"); contents.appendRawCommands("\n0 Ts\n".getBytes()); contents.setFont(font, 18); contents.drawString("M");
(DrawSpecialCharacters方法
testDrawTmSignLetters
)