【问题标题】:Java: Write national characters to PDF using PDFBox [duplicate]Java:使用 PDFBox 将国家字符写入 PDF [重复]
【发布时间】:2012-10-27 19:05:56
【问题描述】:

可能重复:
Using PDFBox to write UTF-8 encoded strings to a PDF

我需要使用捷克国家字符创建 PDF,并且我正在尝试使用 PDFBox 库来实现。 我从一些教程中复制了以下代码:

public void doIt(String file, String message) throws IOException, COSVisitorException
{
    PDDocument doc = null;
    try
    {
        doc = new PDDocument();
        PDSimpleFont font = PDType1Font.TIMES_ROMAN;

        TextToPDF textToPdf = new TextToPDF();

        textToPdf.setFont(font);
        textToPdf.setFontSize(12);
        doc = textToPdf.createPDFFromText(new StringReader(message));
        doc.save(file);
    }
    finally
    {
        if( doc != null )
        {
            doc.close();
        }
    }
}

现在,我正在调用函数 doIt:

app.doIt("test.pdf", "Skákal pes přes oves, přes zelenou louku.");

这完全有效,但在输出 PDF 中我得到:“þÿSkákal pes pYes oves, pYes zelenou louku。”

我试图找到如何在 PDFBox 中设置 UTF-8 编码,但恕我直言,互联网上没有解决方案。

您有什么想法,如何在输出 PDF 中获得正确的文本?

谢谢。

【问题讨论】:

  • 在提问之前,请在 stackoverflow 的其他地方寻找已经回答过的这个问题。 stackoverflow.com/questions/5425251/…
  • 我已经看过这个了。它看起来很棒,但字符“š”是我能够通过其转义码以正确编码写入 PDF 的唯一字符。字符“š”在 UTF-8 表中有两个不同的代码,并且只有一个有效。 (更多:doc.infosnel.nl/extreme_utf-8.html)不幸的是,我需要的所有其他字符在 UTF-8 表中只有一个代码,这些代码不起作用。转义码还有更多问题..
  • 您是否尝试过有关嵌入 Gentium 或 Doulus 字体的答案?
  • 不,我没有。我将使用 iText 来做这件事。虽然我认为这些字体并不能解决任何问题,因为在捷克共和国我们通常使用 Times new roman、Arial 等字体。但感谢您的帮助。

标签: java utf-8 internationalization pdfbox


【解决方案1】:

我认为它的PDType1Font.TIMES_ROMAN 字体不支持您的捷克国家字符。如果您可以设法获取Czech national characters.ttf 文件,则使用下面的方法获取PDFont,如下所示并使用相同的:

      PDFont font = PDTrueTypeFont.loadTTF( doc, new File( "CheckRepFont.ttf" ) );

这里CheckRepFont.ttf 是您的字体文件名作为示例。用实际的更新它。

编辑:

  PDStream pdStream  = new PDStream(doc);
  PDSimpleFont font = PDType1Font.TIMES_ROMAN;
  font.setToUnicode(pdStream);

【讨论】:

  • 这个我已经试过了,但更糟。我相信这个问题不是由字体中缺少捷克字符引起的 - 字符在这些字体中。
  • @user1735603 看看PDSimpleFont 中的setToUnicode 方法是否有帮助?
  • 感谢您的帮助。我正在尝试使用 setToUnicode,但它需要“COSBase”类型的参数。而且我完全不知道如何在这种情况下使用它..(这也意味着 font.setToUnicode(pdStream) 对我不起作用)
  • @user1735603 COSBase= The base object that all objects in the PDF document will extend。尝试设置您的文档对象本身。请查看我更新的答案(我在大约 1/2 小时前更新了)。
  • 这很奇怪,但你的代码真的不适合我。我无法编译它。您使用什么版本的 PDFBox?我使用的是 1.7.1 版
猜你喜欢
  • 2015-04-18
  • 2011-07-22
  • 2012-12-11
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 2015-06-04
相关资源
最近更新 更多