将html转为pdf时,由于没有目录,故在生成pdf之后操作pdf来生成目录,但是有跳转问题,点击目录跳转不到对应的页面,该问题困扰了好多天,结果用一个很简单的办法即可解决。
将目录写道html代码中,用锚点解决,a标签跳转,当转为pdf时,点击a标签跳转事件还是可以正常跳转。由于itext5及以上版本采用AGPLv3协议,基本不可商用,所以采用了flying-saucer-pdf来完成html转pdf操作。上个核心代码吧。
ITextRenderer renderer = new ITextRenderer();
String simsun = "D:\\simsun.ttc";
String arialuni = "D:\\arialuni.ttf";
//设置字体,解决输出中文为空白的问题。
renderer.getFontResolver().addFont(simsun, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.getFontResolver().addFont(arialuni, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
String html = FileUtils.readFileToString(new File("D:\\template.html"), StandardCharsets.UTF_8);
// 把html代码传入渲染器中
renderer.setDocumentFromString(html);
FileOutputStream out = new FileOutputStream("D:\\TEST\\test.pdf");
renderer.layout();
renderer.createPDF(out);
renderer.finishPDF();
out.flush();
out.close();
template.html的代码内容如下:
<html>
<head>
<title>目录与内容</title>
</head>
<body>
<h1>目录与内容</h1>
<ul>
<li><a href="#intro">1111</a></li>
<li><a href="#history">2222</a></li>
<li><a href="#conclusion">3333</a></li>
</ul>
<h2 id="intro" style="margin-top: 800px;">111</h2>
1111……
<h2 id="history">222</h2>
2222……
<h2 id="conclusion">333</h2>
33333……
</body>
</html>
相关flying-saucer-pdf的中文问题,换行问题,分页,页眉页脚,水印等推荐参考这位博主的文章flying-saucer-pdf终于完美解决了(中文问题,换行问题,分页,页眉页脚,水印),html+css控制pdf样式
如有其他问题,请留言,欢迎大家来交流有关java操作pdf的各种问题。