天天看點

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);
    }
}