如果不需要显示总页数(像X of Y , 当前是第X页,共Y页之类的),下面的方法就够.
在Document.open()之前加上
HeaderFooter footer = new HeaderFooter(new Phrase("页码:",yourFont, true);
footer.setBorder(Rectangle.NO_BORDER);
document.setFooter(footer);
如果要加上总页数,就麻烦多了-___-.
您需要使用PdfTemplate来保存总页数信息,需要使用PdfPageEvent来在一些类型的事件响应代码里做些处理.
获得总页数这样的工作随便一想好像很容易,但是在iText流水式输出内容到pdf文档中的每一页的时候,它怎么知道一共有多少页?好吧,是在它把内容全部输出完的时候,它知道自己弄了多少页了,但这时候又怎么回过头来给每个页面重新加上页码?
说实话,到现在我也只是根据
官方例子成功得到了想要的效果而并不太了解相关的工作原理.
我们可以通过实现PdfPageEvent接口或者扩展PdfPageEventHelper类,使我们可以在文档开始、每页开始、每页结束、文档结束等地方做些工作以达到插入页码的目的.
public class PDFMaker extends PdfPageEventHelper {
/**这个PdfTemplate实例用于保存总页数 */
public PdfTemplate tpl;
/** 页码字体 */
public BaseFont helv;
public void make(Document doc) throws Exception
{
pdf = new com.lowagie.text.Document(pagesize,10,10,10,10);
PdfWriter writer = PdfWriter.getInstance(pdf,pdfout);
//设置页页事件监听器
Font pageNumFont = new Font(bf_chn,9,Font.NORMAL);
writer.setPageEvent(this);
pdf.open();
//正常的PDF写入操作代码
pdf.close();
}
@Override
public void onCloseDocument(PdfWriter writer, com.lowagie.text.Document arg1) {
// TODO Auto-generated method stub
System.out.println("OCD");
tpl.beginText();
tpl.setFontAndSize(helv, 12);
tpl.setTextMatrix(0, 0);
tpl.showText("" + (writer.getPageNumber() - 1));
tpl.endText();
}
/* (non-Javadoc)
* @see com.lowagie.text.pdf.PdfPageEventHelper#onEndPage(com.lowagie.text.pdf.PdfWriter, com.lowagie.text.Document)
*/
@Override
public void onEndPage(PdfWriter writer, com.lowagie.text.Document document) {
// TODO Auto-generated method stub
System.out.println("OEP");
PdfContentByte cb = writer.getDirectContent();
cb.saveState();
String text = "Page " + writer.getPageNumber() + " of ";
float textSize = helv.getWidthPoint(text, 9);
float textBase = document.bottom();
cb.beginText();
cb.setFontAndSize(helv, 9);
// for odd pagenumbers, show t
cb.setTextMatrix(document.left(), textBase);
cb.showText(text);
cb.endText();
cb.addTemplate(tpl, document.left() + textSize, textBase);
cb.saveState();
}
/* (non-Javadoc)
* @see com.lowagie.text.pdf.PdfPageEventHelper#onOpenDocument(com.lowagie.text.pdf.PdfWriter, com.lowagie.text.Document)
*/
@Override
public void onOpenDocument(PdfWriter writer, com.lowagie.text.Document arg1) {
// TODO Auto-generated method stub
System.out.println("OOD");
try{
// initialization of the template
tpl = writer.getDirectContent().createTemplate(100, 100);
// tpl.setBoundingBox(new Rectangle(0, 0, 10, 10));
// initialization of the font
helv = BaseFont.createFont("Helvetica", BaseFont.WINANSI, false);
}catch(Exception e)
{
}
}
}
基本流程如上述不完整程序(要完整的请看官方例子,不过那个例子还有其他演示功能不好集中精神分析页码问题),我不明白的是,总页码数是在文档结束时放进PdfTemplate实例里面,怎么在文档结束前的每一页结尾处都可以拿到该值?
之前在每页结尾处的PdfTemplate实例调用结果类似于插入一个占位符,文档总页数确定了的进候再回去填值?
分享到:
相关推荐
本文将深入探讨如何使用iText7这个库在Java环境中生成带有页码和目录的PDF文件。 iText7是一款功能丰富的PDF处理库,它支持创建、编辑、解析和展示PDF文档。在Java中,我们可以利用iText7轻松地生成具有复杂结构的...
本篇将深入探讨如何使用iText来实现Word文档中的目录生成、页码设置、表格创建以及图片插入等功能。 首先,我们需要理解的是,由于iText主要用于PDF,所以在操作Word时,我们通常会借助于像Apache POI这样的库来...
- **复杂格式**:iText处理Word的功能相对较弱,对于复杂的格式化(如页眉、页脚、页码等)可能无法完美支持。 - **性能**:处理大型或复杂的Word文档可能会消耗大量资源,需要优化代码以提高效率。 总的来说,...
本文将详细介绍如何利用iText库在Java中实现Word文档的生成,包括添加段落、插入图片和设置页码等操作。 首先,我们需要引入iText库。在本例中,我们有两个jar文件:`itext-2.1.7.jar`和`itext-rtf-2.1.7.jar`。`...
在实际应用中,iText还可以用于插入图像、创建表格、设置字体样式和颜色、创建书签、添加超链接、创建电子签名等功能,为Java开发者提供了丰富的文档处理能力。通过深入学习iText的API文档和官方示例,开发者可以...
此外,还可以插入图片、创建复杂的表格、添加页眉页脚、设置页码、应用样式模板等。IText提供了API来实现这些功能,使得即使没有深入的Word编程经验,也能轻松创建高质量的文档。 在实际应用中,例如企业报表生成、...
总结一下,要实现在Spring Boot应用中使用iText生成带有页眉、页码、水印、目录和二维码的PDF,你需要: 1. 引入iText及相关库。 2. 创建HTML页面并将其转换为PDF。 3. 定制PDF内容,包括添加页眉、页码和水印。 4. ...
可以通过设置页眉或页脚来插入页码,这不仅可以帮助用户跟踪文档的位置,也有利于组织大量信息。 **使用建议** 为了优化这个示例,建议将PDF生成的部分移到后台,这样可以更好地控制页面布局,避免前端因为数据量...
3. **设置页码**:页码是Word文档的标准元素,IText提供了方法来添加页码。这通常通过定义页码的样式和位置,然后在每一页的页眉或页脚中插入来实现。 4. **字体设置**:IText允许用户自定义文本的字体、大小、颜色...
2. **报表布局**:ITEXT支持复杂的页面布局,如页眉、页脚、多列布局、页码设置等。通过`HeaderFooter`类可以轻松定制这些元素,而`ColumnText`类则用于实现多列文本的自动分布。 3. **数据绑定**:在生成报表时,...
- **事件处理和自定义逻辑**:通过监听器和事件处理机制,开发者可以在PDF生成过程中执行自定义操作,如页码计数、水印添加等。 - **表单处理**:支持Acrobat表单的创建和填写,包括交互式表单和数据导出。 IText库...
4. **图像插入**:iText支持插入JPEG、PNG等格式的图像,通过`Image.getInstance()`方法加载,并添加到PDF文档中。 5. **表格处理**:使用` PdfPTable`类创建表格,可以指定列宽、行高,以及单元格的内容和样式。 ...
7. **处理复杂格式**:虽然iText对基本的Word格式支持良好,但处理复杂的Word格式(如页眉、页脚、页码、样式表等)可能较为有限。对于这类需求,可能需要考虑使用其他库,如Apache POI。 8. **错误处理**:在实际...
下面将详细介绍如何使用IText库来实现这个功能,包括添加图片、创建表格以及插入文本。 首先,你需要在项目中引入IText的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
这个代码示例将指导开发者如何在创建的Word文档每一页上插入自定义的页眉和页脚信息。 在实际应用中,开发者可以利用这些库和代码来实现以下功能: - 创建PDF或RTF文档。 - 添加复杂的文本格式,包括亚洲字符。 - ...
4. **图像集成**:IText可以将JPG、PNG等图像插入PDF,用于图表、图片说明等。`Image`类提供了添加图像的方法。 5. **链接和书签**:使用`Anchor`和`Action`类,可以创建内部和外部链接,以及PDF文档的书签,方便...
9. **事件处理**:通过实现`PdfWriter`的事件接口(如`PdfPageEventHelper`),可以在PDF文档的生命周期中触发自定义行为,如在每一页的底部添加页码。 10. **版本兼容性**:虽然2.0.8是一个较旧的版本,但仍然适用...
除了文字,iTextPDF还支持在PDF中插入和操作图像。`Image`类是处理图像的核心,它可以读取各种格式的图片文件(如JPEG、PNG等),并将其嵌入PDF文档。开发者可以调整图像的大小、位置、透明度等属性,甚至进行裁剪和...
ITEXT 是一个流行的Java库,专门用于创建和处理PDF文档。在PDF文档中,目录(或书签)是非常重要的组成...在实际应用中,你还可以结合其他功能,如图片插入、表格创建、超链接添加等,来增强PDF文档的内容和交互性。