java - 使用itext在pdf中显示总页数错误

标签 java itext

生成的 pdf 中未显示总页码。

阅读以下帖子后PDF Page我生成了以下代码,但它显示了以下输出:

首页:-

        Page 1 of 1

第二页:-

第 2 页,共 1 页

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Font;
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 LogoHeaderFooter extends PdfPageEventHelper {

    String header;
    int totalNumber = 0;
    PdfTemplate total;

    public void setHeader(String header) {
        this.header = header;
    }

    public void onOpenDocument(PdfWriter writer, Document document) {
        total = writer.getDirectContent().createTemplate(30, 12);
        System.out.println("No : "+writer.getPageNumber());
        System.out.println("PDF Template : "+total);
    }

    public void onStartPage(PdfWriter writer, Document document) {
        //total = writer.getDirectContent().createTemplate(30, 12);
        writer.setPageCount(++totalNumber);
        System.out.println("Page No : "+writer.getPageNumber());
        System.out.println("Total No : "+totalNumber);
        //totalNumber++; 
    }
    public void onEndPage(PdfWriter writer, Document document) {

        Font ffont = new Font(Font.FontFamily.UNDEFINED, 10, Font.NORMAL);

        PdfPTable table = new PdfPTable(3);
        try {
            table.setWidths(new int[]{24, 24, 2});
            table.getDefaultCell().setFixedHeight(10);
            table.getDefaultCell().setBorder(Rectangle.NO_BORDER);

            PdfPCell cell = new PdfPCell();
            cell.setBorder (0);
            cell.setBorderWidthTop (1);
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            cell.setPhrase(new Phrase("", ffont));
            table.addCell(cell);

            cell = new PdfPCell();
            cell.setBorder (0);
            cell.setBorderWidthTop (1);
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            cell.setPhrase(new Phrase(String.format("Page %d of", writer.getPageNumber()), ffont));
            table.addCell(cell);

            cell = new PdfPCell(Image.getInstance(total));
            cell.setBorder (0);
            cell.setBorderWidthTop (1);
            table.addCell(cell);
            table.setTotalWidth(document.getPageSize().getWidth()
                    - document.leftMargin() - document.rightMargin());
            table.writeSelectedRows(0, -1, document.leftMargin(),
                    document.bottomMargin() - 15, writer.getDirectContent());

        }
        catch(DocumentException de) {
            throw new ExceptionConverter(de);
        }
    }

    public void onCloseDocument(PdfWriter writer, Document document) {

        Font ffont = new Font(Font.FontFamily.UNDEFINED, 10, Font.NORMAL);
        ColumnText.showTextAligned(total, Element.ALIGN_LEFT,
                new Phrase(String.valueOf(writer.getPageNumber() - 1), ffont),
                2, 1, 0);
    }

}

无法找到此代码中的错误,任何帮助将不胜感激。

最佳答案

你的代码对我来说工作正常,文档的创建一定有问题。

在下面的小测试中,我使用您的帮助程序类创建了一个包含三页的 PDF 文档,并且每个页面都有正确的页脚集(1/32/33/3)。

public static void main(String[] args) throws FileNotFoundException, DocumentException {
    Document document = new Document();

    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("dest.pdf"));
    LogoHeaderFooter logoHeaderFooter = new LogoHeaderFooter();
    writer.setPageEvent(logoHeaderFooter);

    document.open();

    for (int i = 0; i < 3; ) {
        i++;
        document.add(new Paragraph("Paragraph " + i));
        document.newPage();
    }
    document.close();
}

关于java - 使用itext在pdf中显示总页数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44660733/

相关文章:

java - 将 pdf 与 itext 结合 - 横向页面呈现为纵向

java - 矩形去掉边

java - 在Java中分割字符串时标记会粘住吗?

java - 将 JDK 从 32 位升级到 64 位

java - 将 SQLite 与我的 Java EE 应用程序集成的正确方法是什么?

java - 在 Java 中合并两个 Map 值,如果键相同,则附加在 Java 7 或 Java 8 中不会覆盖的值

java - 使用itext在亚马逊s3上存储pdf文件

java - 从 PDF 图像中提取文本

java - iText PDF 中 Document 的 'margin' 属性是做什么用的?

java - 如何针对不同环境运行 JUnit 5 测试套件 [micronaut 1.2.5]?