当前位置: 首页 > 知识库问答 >
问题:

在将信息添加到文档页脚时,如何获取iText7中的总页码?

邵阳
2023-03-14

在iTextSharp中,我们可以覆盖OnCloseDocument()事件,并将页面#of#total添加到文档的页脚。但是,PdfDocument不再具有此文档关闭事件。既然我们不能在添加新页面时确定总页数,那么在生成文档时如何确定总页数并将其放在页脚上呢?

我看到了一些关于蛮力方法的建议:生成PDF文档后,在刷新之前,使用PdfReader阅读它,在更新页脚之前获得总数。这是唯一的办法吗?有没有更好的方法?

谢谢

共有2个答案

充小云
2023-03-14

这是一种方法。

此代码示例中描述了另一种方法:

protected void manipulatePdf(String dest) throws Exception {
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
    Document doc = new Document(pdfDoc);

    int numberOfPages = pdfDoc.getNumberOfPages();
    for (int i = 1; i <= numberOfPages; i++) {

        // Write aligned text to the specified by parameters point
        doc.showTextAligned(new Paragraph(String.format("page %s of %s", i, numberOfPages)),
                559, 806, i, TextAlignment.RIGHT, VerticalAlignment.TOP, 0);
    }

    doc.close();
}

在该代码示例中,您将在创建和刷新PDF后添加页脚。这是一个非常简单和容易的方法来完成这个请求。

锺离边浩
2023-03-14

另一种方法是使用IEventHandler。

 PdfWriter writer = new PdfWriter(myMemoryStream);
                 pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new TextFooterEventHandler(document));

然后:

  public class TextFooterEventHandler : IEventHandler
    {
        protected Document doc;

        public TextFooterEventHandler(Document doc)
        {
            this.doc = doc;
        }

        public void HandleEvent(Event currentEvent)
        {
            var docEvent = (PdfDocumentEvent)currentEvent;
            var pageSize = docEvent.GetPage().GetPageSize();
            var fonts = new FontHelper();
            var font = fonts.Label();

            int pageNum = docEvent.GetDocument().GetPageNumber(docEvent.GetPage());

            float coordX = ((pageSize.GetLeft() + doc.GetLeftMargin())
                             + (pageSize.GetRight() - doc.GetRightMargin())) / 2;
            float footerY = doc.GetBottomMargin();

            Canvas canvas = new Canvas(docEvent.GetPage(), pageSize);
            canvas
                .SetFont(font)
                .SetFontSize(8)
                .ShowTextAligned((("Page " + pageNum.ToString())), coordX + 250, footerY - 40, TextAlignment.CENTER)
                .SetLineThrough()
                .Close();
        }
    }
 类似资料:
  • 问题内容: 我在将新的简单XWPFTable添加到XWPFHeader(或Footer)时遇到了严重的麻烦。不幸的是,似乎只有一个人遇到相同的问题(https://bz.apache.org/bugzilla/show_bug.cgi?id=57366#c0)。 有谁有办法实现这一目标? 任何帮助将不胜感激! 亲切的问候… 〜丹尼尔 问题答案: 这可以使用公共XWPFTable insertNew

  • 问题内容: 如何使用itext从html源向pdf添加标头? 当前,我们扩展了PdfPageEventHelper并覆盖了这些方法。工作正常,但是当我进入2个以上页面时,它将引发RuntimeWorkerException。 问题答案: 通常, 禁止 在事件中添加内容。这是 禁止 添加内容到的对象。您应该使用而 不是 文档在方法中添加页眉和页脚。此外:通过一遍又一遍地解析HTML,您正在浪费大量C

  • 我可以使用iText7和C#ASP. NET创建一个pdf文件 这个pdf文件共包含9页。 我试图在代码中添加总页数和一条虚线 但我有两个问题 页数(9页中的1页,9页中的2页,9页中的3页...)只显示在PDF文件中的第8页和第9页中 虚线没有显示在第一页... 任何帮助都将不胜感激。。。非常感谢。 下面是我的代码

  • 我在运行时用一个模板文件在itext7.pdfhtml中构建一个PDF。我想在生成的PDF中的每一页都添加一个页脚,该PDF有两页,但出于某种原因,页脚只出现在第二页。

  • 亲切的问候... ~丹尼尔

  • 这是我尝试过的代码,但我得到以下异常: iText。内核PDFEException:“无法在已刷新的页面上绘制元素。” 我需要在最后添加页码,因为在生成pdf的内容后,我生成了一个目录并将其移动到文档的开头。因此,我只知道生成所有页面后的页码。