日期:2014-05-20  浏览次数:20888 次

哪位大侠会用java实现html转pdf啊?急用,谢谢啊!
如题

------解决方案--------------------
用IText啊
------解决方案--------------------
速度慢是因为访问w3c的网站吧
下面的代码还是比较快的

Java code

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.pdf.BaseFont;

public class TestFlyingSauser
{

    public static void main( String[] args ) throws Exception
    {
//        demo_1();
        demo_2();
    }

    // 不支持中文
    public static void demo_1() throws Exception
    {
        String inputFile = "D:/Test/flying.html";
        String url = new File( inputFile ).toURI().toURL().toString();
        String outputFile = "D:/Test/flying.pdf";
        OutputStream os = new FileOutputStream( outputFile );
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument( url );
        renderer.layout();
        renderer.createPDF( os );
        os.close();
    }

    // 支持中文
    public static void demo_2() throws Exception {  
        String outputFile = "G:/demo_3.pdf";  
        OutputStream os = new FileOutputStream(outputFile);  
        ITextRenderer renderer = new ITextRenderer();  
        ITextFontResolver fontResolver = renderer.getFontResolver();  
        fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  
        StringBuffer html = new StringBuffer();  
        // DOCTYPE 必需写否则类似于 这样的字符解析会出现错误  
        html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");  
        html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">").
             append("<head>")  
            .append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
            .append("<style type=\"text/css\" mce_bogus=\"1\">body {font-family: SimSun;}</style>") 
            .append("</head>")  
            .append("<body>");  
        html.append("<div>支持中文!</div>");  
        html.append("</body></html>");  
        renderer.setDocumentFromString(html.toString());  
        // 解决图片的相对路径问题  
        // renderer.getSharedContext().setBaseURL("file:/F:/teste/html/");  
        renderer.layout();  
        renderer.createPDF(os);  
        os.close();  
    }}

------解决方案--------------------
上面我是瞎猜的,不过用上面的代码确实很快
------解决方案--------------------
转图片的就复杂一些了,我之前倒是做过
用htmlparser解析html,把里面的图片相对地址改成文件绝对地址,然后把所有的数据添加到pdf中就行了
------解决方案--------------------
能转那些很复杂的网页?
------解决方案--------------------
lz调试成功了吗?贴出代码参考学习学习。
------解决方案--------------------
我只想说,对于没有规则的html,想转化为pdf,基本没戏。
不要死缠了。
对于有规则的html,使用模板技术freemarket。
------解决方案--------------------
我还没见过开源的有这种东西,这些东西都是商业产品。