iText加入页码

如果不需要显示总页数(像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文档中的每一页的时候,它怎么知道一共有多少页?好吧,是在它把内容全部输出完的时候,它知道自己弄了多少页了,但这时候又怎么回过头来给每个页面重新加上页码?

说实话,到现在我也只是根据[url=http://itextdocs.lowagie.com/tutorial/directcontent/pageevents/index.php]官方例子[/url]成功得到了想要的效果而并不太了解相关的工作原理.

我们可以通过实现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实例调用结果类似于插入一个占位符,文档总页数确定了的进候再回去填值?
java使用itext7实现html转pdf 前言 最近项目里有个功能是要把前端展示的内容给导出pdf。经过一段时间的调研和尝试,最终选择了itext7来实现。网上有很多关于itext5的博客或者文档,但是关于itext7还挺少的。 首先介绍一下大体流程吧,项目是基于springboot 和vue 的前后端分离架构,基本思路是由前端生成html文件,传给后端,后端通过itext7转为pdf返回前端。废话少说,直接上代码! 一、前端处理html 由于不是我写的代码,这里只能给出参考:https://segmentfault.com/a/11900 阅读详情

相关推荐

Java 使用iText7生成带页码的PDF文件(同时生成目录,但是不会合并两个PDF)

gradle项目,首次使用请先下载jar包(右键项目→Gradle→Refresh),不然报错!

iText5添加页眉、页脚,logo、页码等实现

iText5添加页眉、页脚,logo、页码

running17的博客 6487

iText7 html转换为pdf生成页码、页眉、页脚DEMO

itext7 html转换为pdf;iText7页码、页眉、页脚,itext 的复杂表格实现;完整springboot项目代码

itext生成pdf加页码和总页码

原生成pdf代码(不带页码) public static void html2pdf(String htmlFile, String pdfFile) { // step 1 String url; OutputStream os = null; try { File file = new File(p...

qi923701的博客 1万+

itext设置页码(第x页/第y页)

1.新建类ItextPdfHeaderFooter import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.PageSize; import com.itextpdf.text.Phrase; import...

落叶的位置 1861

iText系列(四) iText加入页码

如果不需要显示总页数(像X of Y , 当前是第X页,共Y页之类的),下面的方法就够. 在Document.open()之前加上 Java代码 HeaderFooterfooter=newHeaderFooter(newPhrase("页码:",yourFont,true); footer.setBorder(Rectangle.NO_BORDER);

jarniyy的博客 1万+

Itext给PDF添加页码

<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> import com.itextpdf.text.Document;...

finally_flx的博客 4535

itext 合并 pdf 并插入页码

第一步 引用jar <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.1</version> ...

z446981439的博客 2706

java itext pdf 添加页码

一、页码添加,重写事件,直接上代码: public class PdfPageXofYEventHelper extends PdfPageEventHelper { public PdfTemplate total; public BaseFont baseFont; /** * 重写PdfPageEventHelper中的onOpenDocument方法 ...

a_good_child的博客 2674

java pdf添加页码_java itext pdf 怎么加页码

展开全部引用spire.pdf.jar到java程序中32313133353236313431303231363533e59b9ee7ad9431333431366266,然后使用下面的代码,页码的位置可以自己调整importcom.spire.pdf.automaticfields.PdfCompositeField;importcom.spire.pdf.automaticfields.P...

weixin_29205061的博客 782

itext生成pdf(附带页眉,页脚,页码

package cn.picclife.mwx.salesupport.marketactivity.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import com....

weixin_30955341的博客 2159

java pdf stamper_使用pdfstamper(Itext)将页码添加到pdf

我有这个代码protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ByteArrayOutputStream output = new ByteArrayOutputStream();try{response.setC...

weixin_28695537的博客 2365

ITEXT-定位PDF中图片的坐标与页码

问题场景:用itext自动生成PDF的过程中,想要在PDF中的某一页加入水印,这个水印图片的页码不固定,所以不能直接用‘sealStamperUnder = stamp.getUnderContent(page-1);’方式加入水印。但是该水印在某一固定图片的上一页,那么我们可以定位这张图片的位置信息,以此获取水印图片的页码信息。通过这种方法还可以获得图片的坐标信息。代码需导入的jar包:itext

心有多大舞台就有多大 1万+

使用itextpdf对PDF文件添加页码

说是对PDF添加页码,其实就是将页码印到PDF上,下面的这种方法比较灵活也比较简单,可以对添加页码的内容以及位置进行调整。话不多说,直接上代码。 import com.itextpdf.text.BaseColor; import com.itextpdf.text.Font; import com.itextpdf.text.Rectangle; import com.itextpdf.text...

sinat_42478429的博客 3819

iText 页码、页眉、页脚工具

iText页码,页眉,页脚 DEMO下载及实现:https://download.csdn.net/download/iosweb/10623375 1,页码工具类 package excelPOI; import java.io.IOException; import com.itextpdf.text.Document; import com.itextpdf.text.Doc...

IOS_Mainstay的博客 1375

pdf按照页码分割 java_java使用itext页码拆分pdf文件

java使用itext页码拆分pdf文件,代码实现如下:/*** @author viralpatel.net** @param inputStream Input PDF file* @param outputStream Output PDF file* @param fromPage start page from input PDF file* @param toPage end pag...

weixin_29260291的博客 454

绘制pdf表格 (二) 通过itext实现在pdf中绘制excel表格样式设置中文字体、水印、logo、页眉、页码

1、 绘制pdf表格 (二) 通过itext实现在pdf中绘制excel表格样式设置中文字体、水印、logo、页眉、页码

一恍过去 2万+
上一篇: iText生成PDF报表分页表头问题的解决
下一篇: IE6下DIV高度显示的Bug
JavaNoob
博客等级 码龄19年 4粉丝 100原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值