上一篇 | 这是最后一篇日志下一篇
Java 订阅所有Java的日志

利用itext2.0.8老版本对html生成pdf,支持中英文

为什么要用itext-2.x版本,现在不是已经很高版本了吗?原因在于授权问题,在2.x版本的时候才是真正意义上的开源免费,而且可以商业应用,后来的都是要许可的。所以用了老版本测试,其实很多年前以前我用过 itext 的api直接生成过很多PDF, 其实也还蛮好用。但对于开发人员来说,更好的做法应该是通过HTML页面直接生成PDF. 至于HTML页面的生成,你可以利用freemarker 等都可以,这不是今天记录的重点。 今天重点是记录把html生成PDF, 并且还要支持中英文. 文章是参考别人来的,自己只是下载测试了一下而已。



程序代码 程序代码

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.pdf.BaseFont;

public class App {
    public void createPdf() throws Exception {
        // step 1
        String inputFile = "Real.html";
        String url = new File(inputFile).toURI().toURL().toString();
        String outputFile = "Real.pdf";
        System.out.println(url);
        // step 2
        OutputStream os = new FileOutputStream(outputFile);
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(url);        

        // step 3 解决中文支持, linux 下可以复制字体到 linux 字体目录下。
        String osName = System.getProperty("os.name").toLowerCase();    
        org.xhtmlrenderer.pdf.ITextFontResolver fontResolver = renderer.getFontResolver();
        if (osName.startsWith("win")) {
            fontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);        
        } else {
            fontResolver.addFont("linux 下的路径", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
        }
        renderer.layout();
        renderer.createPDF(os);
        os.close();        
        System.out.println("create pdf done!!");
    }


    public static void main(String[] args) throws Exception {
        App app = new App();
        app.createPdf();
    }

}

利用itext,将html生成pdf源码下载:
下载文件 itext-html-pdf-source-code

另外还可以参考这篇文章 http://www.yihaomen.com/article/java/490.htm


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 yihaomen 于 2017-08-07 09:54 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: pdf
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.