如果想在页眉或者页脚加上第x页这样的信息,用普通的HeaderFooter就能轻松搞定。
HeaderFooter footer = new HeaderFooter(new Phrase("第:",FontChinese), new Phrase("页",FontChinese));
footer.setBorder(Rectangle.NO_BORDER);
document.setFooter(footer);
document.open();
如果想在每页显示第x页/共y页这样的功能,实现起来没有那么轻松。
官方页面有具体实现的例子,连接地址:
http://itextdocs.lowagie.com/tutorial/directcontent/pageevents/index.php
源码:
http://itextdocs.lowagie.com/examples/com/lowagie/examples/directcontent/pageevents/PageNumbersWatermark.java
源码里面的东西比较繁多,精简以后如下:
import java.io.FileOutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.ExceptionConverter;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfPageEventHelper;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;
public class PdfExport extends PdfPageEventHelper{
public PdfTemplate tpl;
public BaseFont bf;
public static void main(String[] args) {
Document document = new Document(PageSize.A4, 20, 20, 20, 20);
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:\\HelloItext.pdf"));
writer.setPageEvent(new PdfExport());
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
document.open();
Paragraph title = new Paragraph("测试内容。。。。", new Font(bfChinese,15));
title.setAlignment(Element.ALIGN_CENTER);
document.add(title);
} catch (Exception de) {
de.printStackTrace();
}
document.close();
}
public void onOpenDocument(PdfWriter writer, Document document) {
try {
tpl = writer.getDirectContent().createTemplate(100, 100);
bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
}
catch(Exception e) {
throw new ExceptionConverter(e);
}
}
public void onEndPage(PdfWriter writer, Document document) {
//在每页结束的时候把“第x页”信息写道模版指定位置
PdfContentByte cb = writer.getDirectContent();
cb.saveState();
String text = "第" + writer.getPageNumber() + "页,共";
cb.beginText();
cb.setFontAndSize(bf, 8);
cb.setTextMatrix(460, 786);//定位“第x页,共” 在具体的页面调试时候需要更改这xy的坐标
cb.showText(text);
cb.endText();
cb.addTemplate(tpl, 492, 786);//定位“y页” 在具体的页面调试时候需要更改这xy的坐标
cb.saveState();
cb.stroke();
cb.restoreState();
cb.closePath();//sanityCheck();
}
public void onCloseDocument(PdfWriter writer, Document document) {
//关闭document的时候获取总页数,并把总页数按模版写道之前预留的位置
tpl.beginText();
tpl.setFontAndSize(bf, 8);
tpl.showText(Integer.toString(writer.getPageNumber() - 1)+"页");
tpl.endText();
tpl.closePath();//sanityCheck();
}
}
分享到:
- 2009-11-10 16:35
- 浏览 18304
- 评论(1)
- 论坛回复 / 浏览 (1 / 12091)
- 查看更多
相关推荐
itext7 html转换为pdf;iText7页码、页眉、页脚,itext 的复杂表格实现;完整springboot项目代码
本篇将深入探讨如何使用iText来实现Word文档中的目录生成、页码设置、表格创建以及图片插入等功能。 首先,我们需要理解的是,由于iText主要用于PDF,所以在操作Word时,我们通常会借助于像Apache POI这样的库来...
3. **遍历PDF页面**:通过`PdfReader.GetNumberOfPages()`获取PDF的总页数,然后使用`PdfCopy.AddPage`方法将每一页添加到新的PDF文件中。 4. **定义拆分规则**:根据Excel中的规则,这可能涉及到基于页码、内容或...
本主题将深入探讨如何利用给定的`itextpdf-5.5.9.jar`和`jacob.jar`这两个库来实现Java读取Word文档页数的功能。 `jacob.jar`是一个Java到COM桥接库,它允许Java应用程序调用Microsoft Office组件,如Word,从而...
这个方法将PDF文件转换为byte数组,然后使用iText库来解析PDF文件的内容,最后返回一个List[]>对象,其中每个元素代表一个匹配的位置,分别包含页码、x轴和y轴坐标。 在main方法中,可以调用这个方法来查找PDF文件...
处理PDF文件时,有时我们需要将其拆分或合并,以满足特定的需求。iTextSharp是一款强大的.NET库,专门用于处理PDF文档。在这个项目中,我们将深入探讨如何使用iTextSharp库在C#环境下进行PDF的拆分与合并。 首先,...
在每一页被创建时,这个事件监听器会被触发,我们可以在其中添加页码。例如,创建一个名为`PageNumberEventListener`的类,重写`onEndPage(PdfWriter writer, Document document)`方法,在其中使用`ColumnText`或者...
为了确保合并后的文件页码正确,需要对每一页进行重新编号。这可能涉及到计算总页数,然后根据原页面的顺序和位置调整新文档中的页码。 此外,PDFMerge可能还具备优化功能,如减少文件大小。在合并过程中,可以去除...
3. **解析页面**:遍历PDF的页码,对每一页创建一个`PdfStamper`或`PdfCopy`对象,这允许我们在现有PDF上添加或修改内容。 4. **提取文本**:若要提取PDF中的文本,可以使用`PdfTextExtractor`类的`getTextFromPage...
系统内置的变量如$V{PAGE_NUMBER}和$V{PAGE_COUNT}可以用来显示页码和页数。 通过ireport,开发者能够创建各种复杂的报表,包括表格、图表、图像等,并且能够方便地从数据库或其他数据源获取数据,生成美观且信息...
此外,它还支持自定义分页样式和交互,例如显示总记录数、当前页数和页码选择器等。 在分页的基础上,eXtremeTable 还提供了数据导出功能,这使得用户能够方便地将表格数据保存到本地文件中。以下是具体导出方式的...
为了实现 WEB 报表功能,我们需要安装 Java 开发工具包 (JDK)、WEB 服务器以及数据库。本文以 JDK1.5、Resin 2.1.7 和 SQL Server 2000 为例进行说明。 - **JDK 安装**: 下载并安装 JDK1.5,确保环境变量设置正确。...
`getNumberOfPages()` 方法返回PDF的总页数,`getInfo()` 可以获取PDF的元数据,如作者、标题等。`getAcroFields()` 返回AcroFields对象,这可用于处理PDF中的表单字段。 对于PDF文档的内容提取,PdfReader提供了`...