使用的jar文件
xmlworker-5.5.11.jar
itextpdf-5.5.11.jar
下载地址:https://pan.baidu.com/s/1i5AIBvZ
以下为测试代码
package com.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; public class Html2Pdf { public static void main(String [] args) throws Exception { String urlsource = getURLSource(new File("D:/test.html")); String cssSource = getURLSource(new File("D:/css.css")); htmlToPdf(urlsource,cssSource); } // 支持中文 public static void htmlToPdf(String htmlstr,String cssSource) throws Exception { String outputFile = "D:/test.pdf"; Document document = new Document(); PdfWriter writer = null; writer = PdfWriter.getInstance(document, new FileOutputStream(outputFile)); document.open(); InputStream bis = new ByteArrayInputStream(htmlstr.toString().getBytes());
InputStream cssis = new ByteArrayInputStream(cssSource.toString().getBytes());
XMLWorkerHelper.getInstance().parseXHtml(writer, document, bis,cssis);
document.close(); } /** * 通过网站域名URL获取该网站的源码 * * @param url * @return String * @throws Exception */ public static String getURLSource(File url) throws Exception { InputStream inStream = new FileInputStream(url); // 通过输入流获取html二进制数据 byte [] data = readInputStream(inStream); // 把二进制数据转化为byte字节数据 String htmlSource = new String(data); inStream.close(); return htmlSource; } /** * 把二进制流转化为byte字节数组 * * @param instream * @return byte[] * @throws Exception */ public static byte [] readInputStream(InputStream instream) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte [] buffer = new byte[1204]; int len = 0; while ((len = instream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } instream.close(); return outStream.toByteArray(); } }