【问题标题】:Use of box-generating characters (utf-8) in PDFBox在 PDFBox 中使用框生成字符 (utf-8)
【发布时间】:2014-08-11 13:56:35
【问题描述】:

我目前遇到以下问题:使用 PDFBox 生成文档 我想包含生成框的字符,最好是 Courier New。对于那些不应该知道 bgcs 是什么的人,这里是它们的图片:

在我的 Java 类中,我目前得到以下几行。

contentStream.setFont(PDTrueTypeFont.loadTTF(doc, "pdf_content/cour.ttf") , 12);
contentStream.beginText();
contentStream.drawString("┼┌┐└┘│─┘├┤┬┴┼");
contentStream.endText();

不幸的是,正如我们在输出中看到的那样,它们会产生一些奇怪的字符,而不是所需的条形。

有没有人遇到过同样的问题或者有解决这个问题的办法?我还可以提一下,像德语“元音变音”(“äöüß”)这样的打印字符效果很好。

提前致谢!

【问题讨论】:

  • 这是一个错误,与 € (EURO) 符号基本相同,参见 this answer。本质上,您需要替换 PDPageContentStream 方法 drawString
  • 谢谢!很高兴知道这是一个错误,apache 没有显示任何相关信息..
  • 检查您的 IDE 是否设置为 UTF-8(编辑器 编译器)。可以用"\u2500\u2502\u250c..." 测试它或读取那些“[]”字符块中的代码。

标签: java utf-8 pdf-generation pdfbox


【解决方案1】:

通过将所需字符的子集导出到新字体并将它们映射到 unicode 0041004e0061006e,您可以使用键 A-Z 和 a-n 处理这些字符。 PDFBox 使您可以使用以下代码在外部包含字体:

contentStream.setFont( PDTrueTypeFont.loadTTF(doc, "pdf_content/bgcs.ttf"), 12);

由于我一直在寻找一个免费的并且虽然可以编辑现有字体的工作程序,但我发现 fontforge 和 Type Light 似乎都理解使用字符映射(使用 Type Light 测试,因为 fontforge 更多的是 linux/unix应用程序难以嵌入 Windows 8.1)。

希望这可以帮助任何遇到这个 drawString 方法错误的人。

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 2010-12-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2016-04-25
    • 2010-12-12
    • 2011-07-22
    • 2012-12-07
    相关资源
    最近更新 更多