我需要一种使用Java库将HTML文件转换为PDF的方法,最好是免费的。我已经在网上搜索了一些工具来使用,但没有找到一个突出的解决方案(我看到有一些提到iText,但似乎使用它需要付费)。是否存在一种现有的库,我可以利用它来完成HTML到PDF的转换?
您有几个选项:
更新:
最终我使用了 Maven 仓库中的 Flying-Saucer:https://mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf
这对我来说非常容易使用,这是我创建的一个方法来使用它:
public static void generatePDF(String inputHtmlPath, String outputPdfPath)
{
try {
String url = new File(inputHtmlPath).toURI().toURL().toString();
System.out.println("URL: " + url);
OutputStream out = new FileOutputStream(outputPdfPath);
//Flying Saucer part
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(out);
out.close();
} catch (DocumentException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
以下是使用方法:
public static void main(String[] args){
String inputFile = "C:/Users/jrothst/Desktop/TestHtml.htm";
String outputFile = "C:/Users/jrothst/Desktop/TestPdf.pdf";
generatePDF(inputFile, outputFile);
System.out.println("Done!");
}
输出PDF的效果非常好,使用起来也非常简单。它还可以很好地处理HTML中的CSS。我没有用它来处理外部CSS,但我相信这也是可能的。
这是一个完整的将HTML文件转换为PDF文件的工作示例。
import com.itextpdf.text.Document;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.IOException;
import java.io.FileReader;
import java.io.Reader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.StringReader;
import org.jsoup.Jsoup;
public class Html2pdf2 {
private Html2pdf2() {}
public static String extractText(Reader reader) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(reader);
String line;
while ( (line=br.readLine()) != null) {
sb.append(line);
}
String textOnly = Jsoup.parse(sb.toString()).text();
return textOnly;
}
public final static void main(String[] args) throws Exception{
FileReader reader = new FileReader
("example.html");
try {
OutputStream file = new FileOutputStream(new File("D:\\Test.pdf"));
Document document = new Document();
PdfWriter.getInstance(document, file);
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(ht));
document.close();
file.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("finished converting");
}
}