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

在我完成生成后,如何将页码添加到iText7 Pdf中?

靳举
2023-03-14
private void addPageNumbers(Document doc)
{
    var totalPages = doc.GetPdfDocument().GetNumberOfPages();
    for (int i = 1; i <= totalPages; i++)
    {
        // Write aligned text to the specified by parameters point
        doc.ShowTextAligned(new Paragraph(string.Format("page %s of %s", i, totalPages)),
                        559, 806, i, TextAlignment.RIGHT, VerticalAlignment.TOP, 0);
    }
    doc.Close();
}

这是我尝试过的代码,但我得到以下异常:

iText。内核PDFEException:“无法在已刷新的页面上绘制元素。”

我需要在最后添加页码,因为在生成pdf的内容后,我生成了一个目录并将其移动到文档的开头。因此,我只知道生成所有页面后的页码。

共有1个答案

艾成益
2023-03-14

默认情况下,iText会在启动下一页后不久尽早刷新页面(即将其内容写入PdfWriter目标流,并将其释放到内存中)。对于这样一个刷新的页面,你显然不能再添加你的x/y页面标题了。

有一些方法可以解决这个问题。例如,如果您有足够的可用资源,并且不需要激进的早期刷新,您可以通过使用不同的文档构造函数来切换它,该构造函数带有额外的布尔参数InstateFlush,并将该参数设置为false

因此

new Document(pdfDoc)

new Document(pdfDoc, pageSize)

使用

new Document(pdfDoc, pageSize, false)

这是一个相关的答案

 类似资料:
  • 这在某个时间点上很有效,但我有一个用例,在应用程序运行时可以添加用户。 我可以通过哪种方法(通过控制器/服务)进行启动后操作?我想它可能是(它包含方法),但我不确定如何引用或配置它。

  • 我正在尝试使用OpenSSL命令行界面创建基于椭圆曲线的证书。我正在通过在 CLI 中键入以下命令来生成密钥文件: 问题是尽管ECC密钥被成功地生成,但它没有用任何对称密码加密。但是,使用下面的命令加密RSA密钥非常简单: 是否像 RSA 密钥一样加密 ECC 密钥? 我尝试了“OpenSSL 0.9.8zh 2016年1月14日”和“OpenSSL 1.1.0g 2017年11月2日”多参数组合

  • 问题内容: 它可以在默认键盘上正常工作,但是我无法在数字键盘上使用它。 有任何想法吗? 问题答案: 据我所知,您不能在键盘部分上添加“完成”按钮。您必须在或中添加一个(如果您使用的是)。 查看文档以获取更多信息。 编辑 :检查此问题以获取有关如何执行此操作的示例。 编辑2 :Swift中的类似示例。 编辑3 :来自编辑2的代码,因为链接可能过期。 斯威夫特4.2

  • 这是一个我从头制作的密码生成器,但我想添加一个构造函数,这样我就可以使用它进行调用,还需要创建另一个类来调用它。如果可能的话,我想在这个项目上得到一些帮助。所以我的程序基本上解释了如何生成随机数符号,大写和小写。我第一次创建密码生成器代码时,它工作得不太好,因为它给了我全大写,有时全小写,或者只是没有其他变量的符号,然后我编写了这段代码,告诉程序如果没有这个变量,在显示这些变量之前,它无法创建其他

  • 我目前正在开发我的第一个vert.x服务,我对我的部署是如何实现的并不十分有信心。 我有几个垂直点来接受来自其他服务的请求,并将大量工作委托给其他垂直点。我如何可以旋转每个任务的垂直线并在工作完成后将其杀死,或者通过编程方式将垂直线按任务数量放大。 我目前正在启动时生成十个顶点,并使用事件总线将这些任务分布在顶点上。

  • 事实证明,这是Windows唯一的问题,因为在mac或linux上,我没有那个问题。我们的服务器是TFS服务器,因此它必须在Windows上工作。 此外,它可能与eclipse项目的设置方式有关,因为我尝试过一个基本的Hello-World项目,它运行良好。如有任何提示或帮助,将不胜感激。