将HTML转换为PDF文件是一项常见的任务,它可以使您的网站内容更易于打印、分享和存档。在本文中,我们将详细介绍如何用Java实现高质量HTML到PDF文件的转换。
一、选择一个Java PDF库
在开始转换HTML到PDF之前,您需要选择一个适合您的Java PDF库。目前,有许多常用的Java PDF库,如iText、Apache PDFBox和Flying Saucer等。在这里我们选择Flying Saucer作为演示库。
//导入Flying Saucer包 import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.DocumentException; import java.io.IOException; import java.io.File; import java.io.FileOutputStream; public class HtmlToPdfConverter { public void convertHtmlToPdf(String html, String pdfFilePath) throws IOException, DocumentException { //设置文件输出流 FileOutputStream os = new FileOutputStream(pdfFilePath); //使用Flying Saucer生成PDF ITextRenderer renderer = new ITextRenderer(); renderer.setDocumentFromString(html); renderer.layout(); renderer.createPDF(os); //关闭文件输出流 os.close(); } }
二、生成HTML字符串
在将HTML转换为PDF之前,需要先将HTML生成字符串。在这里,我们可以使用Jsoup。
//导入Jsoup包 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class HtmlGenerator { public String generateHtml() { //创建HTML文件 Document document = new Document("https://www.example.com/"); //添加标题 Element title = document.createElement("title"); title.html("Example Title"); document.head().appendChild(title); //添加内容 Element body = document.body(); Element h1 = body.appendElement("h1"); h1.html("Example Header"); Element p = body.appendElement("p"); p.html("This is an example paragraph."); //返回HTML字符串 return document.html(); } }
三、转换HTML到PDF
一旦我们有了HTML字符串和PDF库,我们就可以将HTML字符串转换为PDF。
在这里,我们将使用第一步选择的Flying Saucer库。
public class App { public static void main(String[] args) throws IOException, DocumentException { HtmlGenerator htmlGenerator = new HtmlGenerator(); HtmlToPdfConverter converter = new HtmlToPdfConverter(); //生成HTML字符串 String html = htmlGenerator.generateHtml(); //转换HTML到PDF文件 String pdfFilePath = "example.pdf"; converter.convertHtmlToPdf(html, pdfFilePath); } }
四、设置PDF页面大小和布局
您可以使用Flying Saucer设置生成的PDF文件的布局和页面大小。使用setRootFontSize方法设置文本大小,使用setDocumentMargins方法设置页面边距。
public class HtmlToPdfConverter { public void convertHtmlToPdf(String html, String pdfFilePath) throws IOException, DocumentException { //设置文件输出流 FileOutputStream os = new FileOutputStream(pdfFilePath); //使用Flying Saucer生成PDF ITextRenderer renderer = new ITextRenderer(); renderer.setDocumentFromString(html); //设置文本大小 renderer.getSharedContext().setFontSize(12.0f); //设置页面边距 renderer.getSharedContext().setMargins(20, 20, 20, 20); renderer.layout(); renderer.createPDF(os); //关闭文件输出流 os.close(); } }
五、添加页眉页脚和水印
使用Flying Saucer添加页眉、页脚和水印非常容易。使用setHeaderTemplate、setFooterTemplate和setUserAgentCallback方法为文档添加页眉、页脚和水印。
public class HtmlToPdfConverter { public void convertHtmlToPdf(String html, String pdfFilePath) throws IOException, DocumentException { //设置文件输出流 FileOutputStream os = new FileOutputStream(pdfFilePath); //使用Flying Saucer生成PDF ITextRenderer renderer = new ITextRenderer(); renderer.setDocumentFromString(html); //设置页眉、页脚和水印 renderer.setFooterTemplate(""); renderer.setHeaderTemplate("
Page -Example Header
"); renderer.getSharedContext().setUserAgentCallback(new ExampleUserAgentCallback()); renderer.layout(); renderer.createPDF(os); //关闭文件输出流 os.close(); } } class ExampleUserAgentCallback extends ITextUserAgent { public ExampleUserAgentCallback(ITextOutputDevice outputDevice) { super(outputDevice); } public String resolveURI(String uri) { return "http://www.example.com/wp-content/themes/example/images/watermark.png"; } }
以上是如何用Java将HTML转换为高质量PDF文件的详细阐述,本文主要涉及了选择PDF库、生成HTML字符串、转换HTML到PDF、设置PDF页面大小和布局、添加页眉页脚和水印等方面。希望对您有所帮助!