itext生成页眉页脚
1.概述
iText5中并没有之前版本HeaderFooter对象设置页眉和页脚,可以利用PdfPageEventHelper来完成页眉页脚的设置工作。PdfPageEventHelper中包含以下事件处理器。
onOpenDocument() — 当打开一个文档时触发,可以用于初始化文档的全局变量。
onStartPage() — 当一个页面初始化时触发,可用于初始化页面的设置参数,但是注意这个函数触发时,该页面并没有创建好,不用利用这个函数添加内容,最好利用onEndPage()处理页面的初始化。
onEndPage() — 在创建一个新页面完成但写入内容之前触发,是添加页眉、页脚、水印等最佳时机。
onCloseDocument() — 在文档关闭之前触发,可以用于释放一些资源。
2.重载PdfPageEventHelper类
定义一个类HeaderFooter,继承了父类PdfPageEventHelper
在文档的每个页面中,必须定义一个Ractangle矩形,其中参数为art,这样在HeaderFooter类中就可以通过这个矩形,获取文档的边框位置,从而设置页眉和页脚。
代码如下:
- import com.itextpdf.text.Document;
- import com.itextpdf.text.Element;
- import com.itextpdf.text.Phrase;
- import com.itextpdf.text.Rectangle;
- import com.itextpdf.text.pdf.ColumnText;
- import com.itextpdf.text.pdf.PdfPageEventHelper;
- import com.itextpdf.text.pdf.PdfWriter;
- public class HeaderFooter extends PdfPageEventHelper{
- public void onEndPage (PdfWriter writer, Document document) {
- Rectangle rect = writer.getBoxSize("art");
- switch(writer.getPageNumber() % 2) {
- case 0:
- ColumnText.showTextAligned(writer.getDirectContent(),
- Element.ALIGN_RIGHT, new Phrase("even header"),
- rect.getRight(), rect.getTop(), 0);
- break;
- case 1:
- ColumnText.showTextAligned(writer.getDirectContent(),
- Element.ALIGN_LEFT, new Phrase("odd header"),
- rect.getLeft(), rect.getTop(), 0);
- break;
- }
- ColumnText.showTextAligned(writer.getDirectContent(),
- Element.ALIGN_CENTER, new Phrase(String.format("page %d", writer.getPageNumber())),
- (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);
- }
- }
调用代码如下
- import com.itext.HeaderFooter;
- import com.itextpdf.text.pdf.PdfPageEventHelper;
- import com.itextpdf.text.pdf.PdfWriter;
- import com.itextpdf.text.pdf.ColumnText;
- import com.itextpdf.text.*;
- import java.io.FileOutputStream;
- public class HeaderAndFooterDemo {
public static void main(String[] args){ - Document document = new Document(PageSize.A4, 50, 50, 50, 50);
- try{
- PdfWriter writer=PdfWriter.getInstance(document,
- new FileOutputStream("C:\\testHeaderAndFooter.pdf") );
- Rectangle rect = new Rectangle(36, 54, 559, 788);
- rect.setBorderColor(BaseColor.BLACK);
- writer.setBoxSize("art", rect);
- HeaderFooter header=new HeaderFooter();
- writer.setPageEvent(header);
- document.open();
- document.newPage();
- Paragraph par = new Paragraph("first paragraph");
- document.add(par);
- document.newPage();
- Paragraph par2 = new Paragraph("second paragraph");
- document.add(par2);
- document.close();
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }
3. 解决第X页/共Y页问题
我们通过PdfWriter中的getPageNumber()函数获取当前是第几页,但是没有办法获取文档共多少页。
我们可以利用XObject对象,iText仅在调用释放模板方法后才将PdfTemplate写入到OutputStream中,否则对象将一直保存在内存中,直到关闭文档。
我们可以给第1个页面添加template,直到最后一个页面才将内容写入到这个模板。
- import com.itextpdf.text.Document;
- import com.itextpdf.text.DocumentException;
- import com.itextpdf.text.Element;
- import com.itextpdf.text.ExceptionConverter;
- import com.itextpdf.text.Image;
- import com.itextpdf.text.Phrase;
- import com.itextpdf.text.Rectangle;
- import com.itextpdf.text.pdf.ColumnText;
- import com.itextpdf.text.pdf.PdfPCell;
- import com.itextpdf.text.pdf.PdfPTable;
- import com.itextpdf.text.pdf.PdfPageEventHelper;
- import com.itextpdf.text.pdf.PdfTemplate;
- import com.itextpdf.text.pdf.PdfWriter;
- public class TableHeader extends PdfPageEventHelper{
- String header;
- PdfTemplate total;
- public void setHeader(String header){
- this.header=header;
- }
- public void onOpenDocument(PdfWriter writer,Document document){
- total = writer.getDirectContent().createTemplate(30,16);
- }
- public void onEndPage (PdfWriter writer, Document document) {
- PdfPTable table = new PdfPTable(3);
- try{
- table.setWidths(new int[]{24,24,2});
- table.setTotalWidth(527);
- table.setLockedWidth(true);
- table.getDefaultCell().setFixedHeight(20);
- table.getDefaultCell().setBorder(Rectangle.BOTTOM);
- table.addCell(header);
- table.getDefaultCell().setHorizontalAlignment(
- Element.ALIGN_RIGHT);
- table.addCell(String.format("page %d of",writer.getPageNumber()));
- PdfPCell cell = new PdfPCell(Image.getInstance(total));
- cell.setBorder(Rectangle.BOTTOM);
- table.addCell(cell);
- table.writeSelectedRows(0,-1,34,803,writer.getDirectContent());
- }
- catch(DocumentException de){
- throw new ExceptionConverter(de);
- }
- }
- public void onCloseDocument(PdfWriter writer,Document document){
- ColumnText.showTextAligned(total,Element.ALIGN_LEFT,new Phrase(String.valueOf(writer.getPageNumber()-1)),2,2,0);
- }
- }
itext生成页眉页脚相关推荐
- itext总页数_itext 生成pdf文件添加页眉页脚
原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...
- Java生成pdf设置两行页脚_Itextpdf 5 html生成pdf 页眉页脚
效果图 QQ图片20190117140345.png 继承PdfPageEventHelper重写onEndPage方法 package com.xuqiang.itext.test; import ...
- 【Itext】7步制作Itext5页眉页脚pdf实现第几页共几页
itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...
- itext Pdf页眉/页脚/水印
package com.company.common.core.utils.itext;import com.itextpdf.text.*; import com.itextpdf.text.pdf ...
- itext给已有pdf添加页眉页脚
网上百度到的基本都是生成pdf的时候,添加页眉页脚,但是假如对已有的pdf添加页眉页脚就比较麻烦,突然想到了可以曲线救国,用itext进行复制pdf的时候,在添加页眉页脚,最后可以成功的. 生成pdf ...
- java pdf 页眉_itext生成PDF设置页眉页脚的实例详解
itext生成PDF设置页眉页脚的实例详解 实例代码: /** * ITextTest * iText生成PDF加入列表,注释等内容,同时设置页眉和页脚及页码等. */ package com.lab ...
- ITEXT 页眉页脚页码三件套
问题场景 利用itext写PDF的过程中遇到生成页眉页脚页码的问题,记录下. 整体思路 编写相应事件 在适当位置添加事件 效果 CODE 需要导入的包:itext-pdfa-5.5.6.jar.ite ...
- java导出pdf页码设置_itext生成PDF设置页眉页脚的实例详解
itext生成pdf设置页眉页脚的实例详解 实例代码: /** * itexttest * itext生成pdf加入列表,注释等内容,同时设置页眉和页脚及页码等. */ package com.lab ...
- XMLWorkerHelper生成pdf文件添加页眉页脚
一.Controller代码 import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io. ...
最新文章
- 小技巧: 从开始菜单进行网络搜索
- 机器学习--多标签softmax + cross-entropy交叉熵损失函数详解及反向传播中的梯度求导
- cnblogs反对按钮点击测试
- Java架构-(十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
- 在Prefetcher中取消robots.txt的限制
- 程序的加载和执行(四)——《x86汇编语言:从实模式到保护模式》读书笔记24
- vue 常用ui组件
- java学习笔记11 (构造方法 this深探)
- MongoDB 计划从“Data Sprawl”中逃脱!
- python的os,commands,subprocess启动进程调用的几种方法
- Zara精讲C#.Cache、它和Redis区别是什么???
- web前端入门教程(非常详细)
- 绿联USB2.0 USB外接网卡驱动
- 英文学术论文写作常用词句积累
- response.addheader详解
- 《童梦奇缘-梦幻般的羁绊》第七章-流火
- Windows API用以实现屏幕截图的方法
- 一张图,讲明白UML类图
- Deepin开发环境搭建
- 有一个很好的PS滤镜,可以做出非常漂亮的抽丝效果,我一定要保存下来
热门文章
- [笔记]新概念英语听力
- C1认证学习一(进制学习)
- 「文献」杂合基因组的策略思路
- 抖音CLICKID+淘宝Relaitionid回传淘积木APP内下单--转化归因联调ROI程序算法及代码技术实现
- 计算机人民币货币符号是什么,人民币货币符号-人民币符号究竟是什么?yen;;还是¥? 爱问知识人...
- 计算机文化基础形考作业,(精华版)国家开放大学电大专科《计算机文化基础》网络课形考任务6作业及答案(2页)-原创力文档...
- 关键字与保留词,ES2020版
- 如何用几何画板把圆奇数等分
- allegro-Could not create new pin inst: PA15/JTDI.
- python空间点赞_用Python登录好友QQ空间点赞