使用Java将HTML转换为PDF的技术实现问题咨询
解决Java使用iText将HTML转换为PDF的问题
首先得提醒你:你用的itextpdf-5.1.0和xmlworker-5.5.6版本不兼容!iText和XML Worker的版本必须完全一致,否则很容易出现类找不到、方法不匹配这类奇怪的异常,建议把两个jar包都换成5.5.6版本的。
下面是补全并优化后的可运行代码:
import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.ByteArrayInputStream; public class HtmlToPdfConverter { public static void main(String[] args) { // 注意:如果你的HTML内容是带转义字符(比如<)的,要先转成正常HTML标签再传入 String emailBody = "<html><body> This is my Project </body></html>"; try { OutputStream file = new FileOutputStream(new File("E:\\Test.pdf")); Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, file); // 打开文档准备写入内容 document.open(); // 用XMLWorkerHelper解析HTML并写入PDF XMLWorkerHelper.getInstance().parseXHtml( writer, document, new ByteArrayInputStream(emailBody.getBytes("UTF-8")) ); // 一定要记得关闭资源,避免文件损坏 document.close(); file.close(); System.out.println("PDF文件生成成功啦!"); } catch (Exception e) { e.printStackTrace(); } } }
几个关键细节要注意:
- 版本统一:再次强调,iText和XML Worker版本必须对齐,这是这类问题最常见的坑。
- HTML转义处理:如果你的
emailBody里是<html>这种转义后的字符串,得先转成正常的<html>标签,不然XMLWorker会把它们当普通文本输出,不会解析成HTML结构。 - 字符编码:指定UTF-8编码能避免中文、特殊字符出现乱码的情况。
- 资源关闭:文档和输出流一定要手动关闭,不然可能生成的PDF会损坏无法打开。
如果运行时碰到具体的异常(比如类找不到、解析报错),可以把异常信息贴出来,我再帮你针对性排查。
内容的提问来源于stack exchange,提问作者Dhaval Goti
相关产品推荐
相关产品推荐

