`
nakupanda
  • 浏览: 416796 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

iText加入页码

    博客分类:
  • java
阅读更多
    如果不需要显示总页数(像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实例调用结果类似于插入一个占位符,文档总页数确定了的进候再回去填值?
分享到:
评论

相关推荐

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

    本文将深入探讨如何使用iText7这个库在Java环境中生成带有页码和目录的PDF文件。 iText7是一款功能丰富的PDF处理库,它支持创建、编辑、解析和展示PDF文档。在Java中,我们可以利用iText7轻松地生成具有复杂结构的...

    itext操作word生成目录、页码、表格、插入图片

    本篇将深入探讨如何使用iText来实现Word文档中的目录生成、页码设置、表格创建以及图片插入等功能。 首先,我们需要理解的是,由于iText主要用于PDF,所以在操作Word时,我们通常会借助于像Apache POI这样的库来...

    itext往word里插入图片和画表格

    - **复杂格式**:iText处理Word的功能相对较弱,对于复杂的格式化(如页眉、页脚、页码等)可能无法完美支持。 - **性能**:处理大型或复杂的Word文档可能会消耗大量资源,需要优化代码以提高效率。 总的来说,...

    itext-2.1.7.jar itext-rtf-2.1.7.jar

    本文将详细介绍如何利用iText库在Java中实现Word文档的生成,包括添加段落、插入图片和设置页码等操作。 首先,我们需要引入iText库。在本例中,我们有两个jar文件:`itext-2.1.7.jar`和`itext-rtf-2.1.7.jar`。`...

    itext-2.1.7.jar itext-rtf-2.1.7.jar 和源码

    在实际应用中,iText还可以用于插入图像、创建表格、设置字体样式和颜色、创建书签、添加超链接、创建电子签名等功能,为Java开发者提供了丰富的文档处理能力。通过深入学习iText的API文档和官方示例,开发者可以...

    itext相关jar包

    此外,还可以插入图片、创建复杂的表格、添加页眉页脚、设置页码、应用样式模板等。IText提供了API来实现这些功能,使得即使没有深入的Word编程经验,也能轻松创建高质量的文档。 在实际应用中,例如企业报表生成、...

    springboot使用itext生成pdf并保存到本地

    总结一下,要实现在Spring Boot应用中使用iText生成带有页眉、页码、水印、目录和二维码的PDF,你需要: 1. 引入iText及相关库。 2. 创建HTML页面并将其转换为PDF。 3. 定制PDF内容,包括添加页眉、页码和水印。 4. ...

    Itext利用模板生成PDF实例demo,导入即可使用,供前台下载,打印,预览等

    可以通过设置页眉或页脚来插入页码,这不仅可以帮助用户跟踪文档的位置,也有利于组织大量信息。 **使用建议** 为了优化这个示例,建议将PDF生成的部分移到后台,这样可以更好地控制页面布局,避免前端因为数据量...

    IText导出Word

    3. **设置页码**:页码是Word文档的标准元素,IText提供了方法来添加页码。这通常通过定义页码的样式和位置,然后在每一页的页眉或页脚中插入来实现。 4. **字体设置**:IText允许用户自定义文本的字体、大小、颜色...

    ITEXT 用于生产PDF报表

    2. **报表布局**:ITEXT支持复杂的页面布局,如页眉、页脚、多列布局、页码设置等。通过`HeaderFooter`类可以轻松定制这些元素,而`ColumnText`类则用于实现多列文本的自动分布。 3. **数据绑定**:在生成报表时,...

    itext-5.5.6

    - **事件处理和自定义逻辑**:通过监听器和事件处理机制,开发者可以在PDF生成过程中执行自定义操作,如页码计数、水印添加等。 - **表单处理**:支持Acrobat表单的创建和填写,包括交互式表单和数据导出。 IText库...

    itext开发包

    4. **图像插入**:iText支持插入JPEG、PNG等格式的图像,通过`Image.getInstance()`方法加载,并添加到PDF文档中。 5. **表格处理**:使用` PdfPTable`类创建表格,可以指定列宽、行高,以及单元格的内容和样式。 ...

    使用itext方式导出word格式

    7. **处理复杂格式**:虽然iText对基本的Word格式支持良好,但处理复杂的Word格式(如页眉、页脚、页码、样式表等)可能较为有限。对于这类需求,可能需要考虑使用其他库,如Apache POI。 8. **错误处理**:在实际...

    java使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包)

    下面将详细介绍如何使用IText库来实现这个功能,包括添加图片、创建表格以及插入文本。 首先,你需要在项目中引入IText的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...

    iText生成word代码及jar包(含页眉页脚)

    这个代码示例将指导开发者如何在创建的Word文档每一页上插入自定义的页眉和页脚信息。 在实际应用中,开发者可以利用这些库和代码来实现以下功能: - 创建PDF或RTF文档。 - 添加复杂的文本格式,包括亚洲字符。 - ...

    IText 2.1.5 docs

    4. **图像集成**:IText可以将JPG、PNG等图像插入PDF,用于图表、图片说明等。`Image`类提供了添加图像的方法。 5. **链接和书签**:使用`Anchor`和`Action`类,可以创建内部和外部链接,以及PDF文档的书签,方便...

    itext-2.0.8.jar

    9. **事件处理**:通过实现`PdfWriter`的事件接口(如`PdfPageEventHelper`),可以在PDF文档的生命周期中触发自定义行为,如在每一页的底部添加页码。 10. **版本兼容性**:虽然2.0.8是一个较旧的版本,但仍然适用...

    itextpdf jar

    除了文字,iTextPDF还支持在PDF中插入和操作图像。`Image`类是处理图像的核心,它可以读取各种格式的图片文件(如JPEG、PNG等),并将其嵌入PDF文档。开发者可以调整图像的大小、位置、透明度等属性,甚至进行裁剪和...

    ITEXT 目录生成的第二种方法源码

    ITEXT 是一个流行的Java库,专门用于创建和处理PDF文档。在PDF文档中,目录(或书签)是非常重要的组成...在实际应用中,你还可以结合其他功能,如图片插入、表格创建、超链接添加等,来增强PDF文档的内容和交互性。

Global site tag (gtag.js) - Google Analytics