【问题标题】:how to print unusual characters on PDF (using pdfbox)如何在 PDF 上打印不寻常的字符(使用 pdfbox)
【发布时间】:2014-12-21 23:24:58
【问题描述】:

我正在尝试从头开始创建一个新的 pdf,但我似乎无法正确打印特殊字符,例如我尝试在 PDF 中打印以下字符串:

『I like 《this string》 yeah.』

得到

þÿ0I like 0this string0 yeah.0

结果通过记录器和println正确打印,有人知道怎么做吗,已经尝试过像\u008A这样的ascii编码。

有什么想法吗?

【问题讨论】:

标签: java encode pdfbox


【解决方案1】:

现在可以使用 PDFBOX 打印 utf-8 字符。您需要下载 (https://github.com/apache/pdfbox) 最新的主干版本并编译它(您可以使用 maven 编译它,相信我是最好的选择)。您需要的第二件事是 ttf 字体,其中包含您正在使用的 glphys。

适合我的代码:

package utftext;

import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;

public class utftext {

    public static void main(String[] args) throws Exception {
        PDDocument document = new PDDocument();
        PDPage page = new PDPage(PDRectangle.A4);
        document.addPage(page);
        PDType0Font font = PDType0Font.load(document, new File("E:\\arialuni.ttf"));
        PDPageContentStream stream = new PDPageContentStream(document, page);
        String text = "ssdfg #$%&&English 012 čćžšđ ČĆŽŠĐ as äöüÖÜÄ";
        stream.beginText();
        stream.setFont(font, 12);
        stream.moveTextPositionByAmount(50, 600);
        stream.drawString(text);
        stream.endText();
        stream.close();
        document.save("type0.pdf");
        document.close();
    }

}

【讨论】:

  • 是否有任何具有 MIT、Apache、BSD 或类似许可证的 arialuni.ttf(或任何其他合理的 unicode 字体)的来源?
猜你喜欢
  • 2013-09-09
  • 2016-06-15
  • 2019-07-08
  • 2017-07-15
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多