一、.区别概述
二、详细对比
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”)就可以实现转换。
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);
}
}