itext将html转pdf中文支持

原创 2016年08月31日 14:04:14

首先,这篇文章的重点确实是自己搞的,其他的部分是网上找的。所以是不是原创不好定义,就厚脸皮说这是原创吧。

由于要做一个生成pdf的需求,之前是生成的word,为了省事就想着把word转pdf,查了一些资料,结果放弃了这个想法。这个过程中发现好多html转pdf的也提供了解决中文的问题的方法,觉得可以试试。以为生成word和html只是一个后缀的问题(ftl生成),可以先生成一个html临时文件然后再转pdf。

重点来了,html转pdf的,网上一搜一大堆,也解决中文支持问题,但是到我这里就没用了,重点就是解决中文问题,这里是自己搞的,也算是瞎猫碰死耗子吧。

不多说了,上代码:

BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

MyFontProvider myFontProvider = new MyFontProvider(BaseColor.BLACK, "", "", false, false, 16, 1, baseFont);
        // step 1
        Document document = new Document(PageSize.A4);
        Rectangle A42 = new RectangleReadOnly(800,700);
        document.setPageSize(A42);
        // step 2
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\Users\\PHILIPS\\Desktop1\\notice.pdf"));
        // step 3
        document.open();
        // step 4
        XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                new FileInputStream("C:\\Users\\PHILIPS\\Desktop1\\sss.htm"),null, Charset.forName("UTF-8"),myFontProvider);
        // step 5
        document.close();

很多的资料在parseXHtml这个方法上用的参数比这个少,这里重点是多了myFontProvider这个参数,解决中文问题的。

下面是MyFontProvider 这个类,抛砖引玉了,我自己写的这个是能用了,只是能用,至于什么优化啊,做到可移植啊什么的太深奥的,无能为力了。

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontProvider;
import com.itextpdf.text.pdf.BaseFont;


public class MyFontProvider implements FontProvider {
private BaseColor bc;
private String fontname;
private String encoding;
private boolean embedded;
private boolean cached;
private float size;
private int style;
private BaseFont baseFont;

public MyFontProvider(){}


public BaseColor getBc() {
return bc;
}


public void setBc(BaseColor bc) {
this.bc = bc;
}


public String getFontname() {
return fontname;
}


public void setFontname(String fontname) {
this.fontname = fontname;
}


public String getEncoding() {
return encoding;
}


public void setEncoding(String encoding) {
this.encoding = encoding;
}


public boolean isEmbedded() {
return embedded;
}


public void setEmbedded(boolean embedded) {
this.embedded = embedded;
}


public boolean isCached() {
return cached;
}


public void setCached(boolean cached) {
this.cached = cached;
}


public float getSize() {
return size;
}


public void setSize(float size) {
this.size = size;
}


public int getStyle() {
return style;
}


public void setStyle(int style) {
this.style = style;
}


public BaseFont getBaseFont() {
return baseFont;
}


public void setBaseFont(BaseFont baseFont) {
this.baseFont = baseFont;
}


public MyFontProvider(BaseColor bc, String fontname, String encoding,
boolean embedded, boolean cached, float size, int style,
BaseFont baseFont) {
super();
this.bc = bc;
this.fontname = fontname;
this.encoding = encoding;
this.embedded = embedded;
this.cached = cached;
this.size = size;
this.style = style;
this.baseFont = baseFont;
}


public Font getFont(String arg0, String arg1, boolean arg2, float arg3,
int arg4, BaseColor arg5) {
Font font = null;
if(baseFont==null){
font = new Font();
}else{
font = new Font(baseFont);
}
font.setColor(arg5);
font.setFamily(fontname);
font.setSize(size);
font.setStyle(arg4);
return font;
}


public boolean isRegistered(String arg0) {
// TODO Auto-generated method stub
return true;
}
}


还有jar包什么的相信都能找到吧。iTextAsian.jar,itextpdf-5.5.8.jar,xmlworker-5.5.6.jar。

这是3个主要的jar包,版本低的好可能会有问题,再高的版本不确定,没试。这3个在一起是可行的。

ftl文件生成html再转pdf的,可能会有排版问题,可以自己试试。word保存成html,然后粘贴进ftl,把lang=EN-US这个去掉这样生成的文件是正常的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iText 实现 html 转换 pdf

java实现html转换pdf在现在来看还是一块硬骨头.不过已经有了一些比较好多的开源项目 eg: iText / PDF Box / pd4ml但是实现起来还是不很理想,对css,js,等html以...

(Java实现)HTML页面转PDF解决方案

最近在工作中遇到了一个很囧的事情。要把HTML页面转换成PDF或者tiff图片等其他形式,目前tiff还是一头雾水,如果各位大师有真的可行的想法(不要是别人那边抄的,百度最近搜索的质量严重的打击了我对...

通过iText将html转换成pdf中文乱码问题

这个问题今天调试了5、6小时,真是极度郁闷,不过最终通过调试iText源码以及查资料还是搞定。首先参考我搜到到的一点关键信息:  这是由编码问题引起的。XML标准规定,XML分析器必须支持“UTF-...

java itext html转pdf[续篇]

之前利用itext进行html转pdf,实际使用中还是有些地方确实需要注意的,我所遇到的归纳以下几个问题: 1,中文的支持 2,html格式要求严格 3,pdf里面文字换行问题 第一个中文支持呢,...

Itext 导出PDF(中文解决,HTML转PDF)

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。...

Java实现HTML页面转PDF解决方案

首先,当然是找到能够解析PDF的完美组件,百度和谷歌不约而同的告诉我们。IText是王道。而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了...

Itext5.8.8 Html 转化成PDF

Itext5.8.8 Html 转化成PDF

Java IText实现HTML转换PDF

1、IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源。 2、Flying Sauser实现html2pdf,纠错能力差,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)