【问题标题】:Itext pageNumber Display in PDFItext pageNumber以PDF显示
【发布时间】:2011-11-04 13:25:44
【问题描述】:

大家好,我有一个 java 类,用于在 iText PDF 中显示页眉和页脚。

页码显示在页面顶部,页脚在页脚部分正确显示.. 现在我想在页脚位置显示页码...

以下代码我正在使用

public HeaderAndFooter() {

header = new Phrase("**** Header ****");

footer = new PdfPTable(1);

footer.setTotalWidth(130);

footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

footer.addCell(new Phrase(new Chunk(

"**** Footer summary****")

.setAction(new PdfAction(PdfAction.FIRSTPAGE))));

}

public void onEndPage(PdfWriter writer, Document document) {

PdfContentByte cb = writer.getDirectContent();

ColumnText.showTextAligned(cb, Element.ALIGN_RIGHT, new Phrase(String.format("%d", writer.getPageNumber()),

PDFUtil.getNormalFont()), (document

.right() - document.left())

/ 2 + document.leftMargin(), document.top() + 10, 0);

footer.writeSelectedRows(0, -1,

(document.right() - document.left() - 300) / 2

+ document.leftMargin(), document.bottom() - 10, cb);

}


}

我得到这样的输出

                                        1 (header)

2011 年 8 月 26 日租赁详情 8 月 ---- 5500 个月

杂项----500 总计---5500

                                                                                                               **** Footer summary (footer)
                            **** 

请建议我如何在页脚部分显示页码...Thankxxx in Advance

【问题讨论】:

  • 什么版本的 IText?旧版本有 HeaderFooter 对象
  • 您的 Phrase 与 writer.getPageNumber() 的输出是什么?如果它是空白的,请尝试在其周围添加一些文本以查看是否可能存在其他问题。这是获取页码的调用。您应该能够围绕该格式进行相应的格式化

标签: java pdf-generation itext


【解决方案1】:

伙计们,我也找到了解决方案并开始上课了.. here itzzz...

public class HeaderAndFooter 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.getBorderWidthRight(), rect.getBorderWidthTop(), 0);
        break;
    case 1:
        ColumnText.showTextAligned(writer.getDirectContent(),
                Element.ALIGN_CENTER, new Phrase(String.format("%d", writer.getPageNumber())),
                300f, 62f, 0);
        break;
    }

下面的代码你必须在你的打印类中给出最终字节流排出...... 那里你必须给

baos = new ByteArrayOutputStream();
        Document document = new Document(PageSize.A4, 60, 60, 120, 80);
        PdfWriter writer = PdfWriter.getInstance(document, baos);
        HeaderAndFooter event = new HeaderAndFooter();
        writer.setPageEvent(event);
        document.open();

对于 PageNumber 生成来说,它工作得很好而且很简单...... 注意:我使用的是 iText 2.1.0.jar

【讨论】:

    【解决方案2】:

    来自 iTEXT 的完整工人阶级

    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.Element;
    import com.lowagie.text.ExceptionConverter;
    import com.lowagie.text.Image;
    import com.lowagie.text.Phrase;
    import com.lowagie.text.Rectangle;
    import com.lowagie.text.pdf.ColumnText;
    import com.lowagie.text.pdf.PdfPCell;
    import com.lowagie.text.pdf.PdfPTable;
    import com.lowagie.text.pdf.PdfPageEventHelper;
    import com.lowagie.text.pdf.PdfTemplate;
    import com.lowagie.text.pdf.PdfWriter;
    
    class TableHeader extends PdfPageEventHelper {
        /** The header text. */
        String header;
        /** The template with the total number of pages. */
        PdfTemplate total;
    
        /**
         * Allows us to change the content of the header.
         * 
         * @param header
         *            The new header String
         */
        public void setHeader(String header) {
            this.header = header;
        }
    
        /**
         * Creates the PdfTemplate that will hold the total number of pages.
         * 
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(com.itextpdf.text.pdf.PdfWriter,
         *      com.itextpdf.text.Document)
         */
        public void onOpenDocument(PdfWriter writer, Document document) {
            total = writer.getDirectContent().createTemplate(30, 16);
        }
    
        /**
         * Adds a header to every page
         * 
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(com.itextpdf.text.pdf.PdfWriter,
         *      com.itextpdf.text.Document)
         */
        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, 50, writer.getDirectContent());
            } catch (DocumentException de) {
                throw new ExceptionConverter(de);
            }
        }
    
        /**
         * Fills out the total number of pages before the document is closed.
         * 
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(com.itextpdf.text.pdf.PdfWriter,
         *      com.itextpdf.text.Document)
         */
        public void onCloseDocument(PdfWriter writer, Document document) {
            ColumnText.showTextAligned(total, Element.ALIGN_LEFT, new Phrase(String.valueOf(writer.getPageNumber() - 1)), 2, 2, 0);
        }
    }
    

    【讨论】:

      【解决方案3】:

      它有关于添加页码的信息(仅在页面中,而不是特别在页脚中)How to add total page number on every page with iText?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-22
        • 1970-01-01
        • 2021-07-06
        • 2010-10-10
        • 2014-08-03
        • 2023-04-04
        相关资源
        最近更新 更多