如何在PDF上打印不寻常的字符(使用pdfbox)

时间:2014-12-21 23:24:59

标签: java encode pdfbox

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

『I like 《this string》 yeah.』

并获取

þÿ0I like 0this string0 yeah.0

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

现在可以使用PDFBOX打印utf-8字符。你需要下载(https://github.com/apache/pdfbox)最新的trunk版本并编译它(你可以使用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();
    }

}