IText 7 如何在每页添加线条?仅最后一页显示问题求助
解决每页添加线条的问题
你的代码只在最后一页显示线条,核心问题是:循环里仅创建了LineSeparator对象,但没将它们正确关联到每一页的渲染流程中,而且手动循环指定页数的方式无法让iText把线条渲染到对应页面,最终只有最后一个对象被处理。
要实现每页都显示线条,正确的做法是利用iText的页面事件机制,让线条在每一页结束时自动添加,具体步骤如下:
1. 自定义页面事件类
继承PdfPageEventHelper,重写onEndPage方法——这个方法会在每一页渲染完成时触发,正好用来添加每页都需要的线条:
class LinePageEvent extends PdfPageEventHelper { @Override public void onEndPage(PdfWriter writer, Document document) { // 创建1磅粗的实线 SolidLine line = new SolidLine(1f); // 可选:设置线条颜色 line.setColor(Color.RED); // 创建线条分隔符,设置位置:左右距页面边距100pt,距底部50pt LineSeparator ls = new LineSeparator(line); ls.setFixedPosition(document.left() + 100, document.bottom() + 50, document.right() - 100); try { // 将线条添加到当前页的内容中 writer.getDirectContent().addElement(ls); } catch (DocumentException e) { e.printStackTrace(); } } }
2. 绑定事件并生成文档
把自定义的页面事件绑定到PdfWriter上,之后正常写入文档内容即可,线条会自动在每页生成:
// 初始化文档 Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); // 绑定页面事件 writer.setPageEvent(new LinePageEvent()); document.open(); // 写入文档内容(示例:生成10页内容) for (int i = 1; i <= 10; i++) { document.add(new Paragraph("第" + i + "页的内容")); // 手动分页(如果内容不足以自动分页时使用) document.newPage(); } document.close();
为什么这个方法可行?
onEndPage方法由iText的页面渲染机制自动触发,每完成一页就会执行一次,确保线条被添加到每一页中,不需要手动跟踪页码或创建多个LineSeparator对象。
内容的提问来源于stack exchange,提问作者user10107974
相关产品推荐
相关产品推荐

