使用Java将HTML转换为具有特殊字符的PDF

时间:2012-11-17 07:37:20

标签: java itext flying-saucer html-to-pdf

我正在使用flying saucer iText 2.1.7 转换html to pdf。它运行正常,但是当html中有一些中文,韩文等字符时会出现问题。

我的PDF中出现了意外的字符而不是普通的中文字符

我发现this issue已打开,所以我假设目前还没有办法让飞碟正确渲染PDF?

PS:我也找到this issue,但我无法理解他们提供的解决方案。

这是我正在使用的代码

String doc = file.toURI().toURL().toString();
ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont (
    "C:\\ARIALUNI.TTF",
     BaseFont.IDENTITY_H,
     BaseFont.EMBEDDED
);
renderer.setDocument(doc);
String outputFile = "report.pdf";
OutputStream os = new FileOutputStream(outputFile);

renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();

文件是我要转换的html。

是否有其他方法或库可以做同样的事情?

这是我正在使用的CSS

@font-face {
  font-family: "Arial";
  src: url("media/arialuni.ttf");
 -fs-pdf-font-embed: embed;
 -fs-pdf-font-encoding: Identity-H; 
}

我需要转换的HTML file

These是与itext 2.1..x

兼容的重新编译的飞碟

2 个答案:

答案 0 :(得分:3)

您的字体可能未嵌入PDF文件中。 (How do I know if the fonts in a PDF file are embedded or not?

每个字体都有一个名字,ARIALUNI.TTF定义了Arial Unicode MS,你应该使用它。

所以改变这个:

@font-face {
    font-family: Arial1;
    src: url("arialuni.ttf");
    -fs-pdf-font-embed: embed;
    -fs-pdf-font-encoding: Identity-H;
}

* {
        font-family: Arial1;
}

对此:

@font-face {
    font-family: Arial Unicode MS;
    src: url("arialuni.ttf");
    -fs-pdf-font-embed: embed;
    -fs-pdf-font-encoding: Identity-H;
}

* {
        font-family: Arial Unicode MS;
}

这样就可以嵌入字体。

你不需要拨打renderer.getFontResolver().addFont,css就足够了。

答案 1 :(得分:1)

试试这个:

font.addFont(Html2Pdfs.class.getResource("SIMSUN.TTC").toString().substring(6),BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED)