天天看点

wkhtmltopdf和itext两种工具详细对比

一、.区别概述

wkhtmltopdf和itext两种工具详细对比

二、详细对比

1.itext

这种方法生成的pdf质量会更高,但是在后端实现的步骤过于复杂,而且需要安装字体,对于html代码要求也是比较高,缺少标签的时候会报错

2.wkhtmltopdf

这种方式实现比较简单,wkhtmltopdf是一个软件,这个软件生成pdf支持多种方式,可以直接使用网页网址将页面转化为pdf,也可以使用本地的文件将其转为pdf,而且转化结果及其的完美,加上实现的过程比较简单,所以我觉得这是最优的一种html转化为pdf的方式

三、操作过程

1.安装wkhtmltopdf及示例

wkhtmltopdf把html转成pdf很简单,只要在windows命令行中输入c:\wkhtmltopdf.exe http://www.cnblogs.com c:\cnblogs.pdf

就可以把csdn网页转成pdf,并保存到C盘根目录。

在java中调用wkhtmltopdf的命令Runtime.getRuntime().exec(“c:\wkhtmltopdf.exe http://www.cnblogs.com c:\cnblogs.pdf”)就可以实现转换。

wkhtmltopdf和itext两种工具详细对比

2.itext使用示例

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.11</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

作者:washmore
链接:https://ld246.com/article/1528278305572
来源:链滴
协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/
           
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;

public class PDFUtil {
    public static void writeStringToOutputStreamAsPDF(String html, OutputStream os) {
        writeToOutputStreamAsPDF(new ByteArrayInputStream(html.getBytes()), os);
    }

    public static void writeToOutputStreamAsPDF(InputStream html, OutputStream os) {
        try {
            Document document = new Document(PageSize.A4);
            PdfWriter pdfWriter = PdfWriter.getInstance(document, os);
            document.open();
            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
            worker.parseXHtml(pdfWriter, document, html, Charset.forName("UTF-8"), new AsianFontProvider());
            document.close();
        } catch (Exception e) {
        }
    }
}
/**
 * 用于中文显示的Provider
 */
class AsianFontProvider extends XMLWorkerFontProvider {
    @Override
    public Font getFont(final String fontname, String encoding, float size, final int style) {
        try {
            BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            return new Font(bfChinese, size, style);
        } catch (Exception e) {
        }
        return super.getFont(fontname, encoding, size, style);
    }
}