gpt4 book ai didi

itext7 - 在 itext7 - PdfDocument.GetNumberOfPages() 一直只返回一页

转载 作者:行者123 更新时间:2023-12-05 07:31:15 25 4
gpt4 key购买 nike

  • 我正在尝试在 html 页面的页 footer 分实现第 X 页,共 Y 页。
  • 我通过在 PdfDocument 中调用 GetPageNumber(PdfPage) 来检索 X,通过在 PdfDocument 中调用 GetNumberOfPages() 来检索 Y。
  • PdfDocument 引用自 iText.Kernel.Pdf。但每次我调用 GetNumberOfPages() 时,它一次只返回一页。
  • 例子:当我的总页数为 4 时,我得到如下页脚值。
  • 第 1 页 -> 第 1 页,共 2 页
  • 第 2 页 -> 第 2 页,共 3 页
  • 第 3 页 -> 第 3 页,共 4 页
  • 第 4 页 -> 第 4 页,共 4 页

最佳答案

答案评论中的链接不再有效,但我认为 this是更新的链接。我使用这些信息和一些小的调整让它工作。

这是我的做法。添加这样的事件处理程序:

pdfDocument.AddEventHandler(PdfDocumentEvent.END_PAGE, pageNumberHandler);

这是我在 C# 中的事件处理程序代码:

using iText.Kernel.Events;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Xobject;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using NLog;

namespace PrintLibrary.iTextEvent
{
public class PageNumberHandler : IEventHandler
{
private ILogger Logger => _logger ?? (_logger = LogManager.GetCurrentClassLogger());
private readonly PdfFormXObject _totalPagesPlaceHolder = new PdfFormXObject(new Rectangle(0, 0,40,20));
public void HandleEvent(Event e)
{
var docEvent = (PdfDocumentEvent)e;
var pdf = docEvent.GetDocument();
var pageCount = pdf.GetNumberOfPages();
if (pageCount <= 1)
{
// return here because I don't want page 1 of 1 printing, but only when it's more than 1 page
Logger.Trace("Only 1 page in document, returning");
return;
}
Logger.Trace($"Run {nameof(HandleEvent)}");

var page = docEvent.GetPage();
var currentPageNumber = pdf.GetPageNumber(page);

var pageSize = page.GetPageSize();
var pdfCanvas = new PdfCanvas(page);
var canvas = new Canvas(pdfCanvas, pageSize);

var p = new Paragraph()
.Add($"Page {currentPageNumber}");

Logger.Trace($"Printing text to page, current page # {currentPageNumber}");

var x = pageSize.GetWidth() / 2;
var y = pageSize.GetBottom() + 20;
canvas.ShowTextAligned(p,
x, y, TextAlignment.RIGHT);
canvas.Close();

pdfCanvas.AddXObjectAt(_totalPagesPlaceHolder, x, y);
pdfCanvas.Release();
}

public void WriteTotal(PdfDocument pdf)
{
var pages = pdf.GetNumberOfPages();
if (pages <= 1) return;

Logger.Trace($"Setting total number of pages on footer to {pages}");
var canvas = new Canvas(_totalPagesPlaceHolder, pdf);
canvas.ShowTextAligned($"of {pages}", 3f, 0, TextAlignment.LEFT);
canvas.Close();
}

private ILogger _logger;
}
}

关于itext7 - 在 itext7 - PdfDocument.GetNumberOfPages() 一直只返回一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51932386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com