当前位置: 首页 > 面试题库 >

使用itext对PDF页面进行重新排序

颛孙庆
2023-03-14
问题内容

我正在使用 itext pdf 库。谁能知道我如何在现有的pdf中移动页面?

实际上,我想 在文件开头移动最后几页。

它类似于下面的内容,但我不知道它是如何工作的。

 reader = new PdfReader(baos.toByteArray());
 n = reader.getNumberOfPages();
 reader.selectPages(String.format("%d, 1-%d", n, n-1));
 PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filename));
 stamper.close();

谁能详细解释一下?


问题答案:

selectPages()方法在我的书的第6章中进行了说明(请参见第164页)。在代码片段6.3和6.11的上下文中,它用于减少PdfReaderPdfStamper或消耗的正在读取的页面数PdfCopy。但是,它也可以用于重新排序页面。首先让我解释一下语法。

selectPages()方法有不同的风格:

您可以传递List<Integer>包含您要保留的所有页码的。此列表可以包括递增的页码:1、2、3、4,…如果更改顺序,例如:1、3、2、4,…
PdfReader将按更改后的顺序提供页面。

您还可以使用以下语法传递字符串(这是在代码段中完成的操作):

[!][o][odd][e][even]start[-end]

您可以使用逗号分隔多个范围,并且!修饰符可从已选择的内容中删除页面。范围更改是递增的;范围出现时,将添加或删除数字。起点或终点可以省略;如果两者都省略,则至少需要o(奇数;选择所有奇数页)或e(偶数;选择所有偶数页)。

就您而言,我们有:

String.format("%d, 1-%d", n, n-1)

假设我们有一个10页的文档,然后n等于10,并且格式化操作的结果是:"10, 1-9"。在这种情况下,PdfReader将最后一页显示为第一页,然后显示第1至9页。

现在,假设您有一个从第8页开始的目录,并且想要将此目录移到第一页,那么您需要这样的东西:8-10, 1-7,或者toc等于8 n等于10:

String.format("%d-%d, 1-%d", toc, n, toc -1)

有关该format()方法的更多信息,请参阅API文档String和Format
String语法



 类似资料:
  • 免责声明: 我使用的是iText5。我知道这通常不受欢迎(相对于使用iText7),但我正在使用大量使用iText5的遗留代码,升级不在我的控制范围内。 null 进展/办法: 我扩展了以生成包含字体信息(大小和系列、粗体或斜体等)以及位置信息(相对于绝对坐标系,原点位于输入PDF第一页的左上角)的XML。 然后逐页生成一个新的PDF(根据上面概述的要求,每个页都是所需的长度),根据每个新页的边界

  • 问题内容: 我正在尝试使用具有以下代码的iText 7创建PDF文档,并且生成时,我的PDF文档内容在同一页面中重叠(即,在第1页中)。 我看到了 document.newPage(); iText 7中缺少该方法。如何在itext 7中不使用pdfDocumet.copyPages(…)或PDFmerger将页面添加到我的PDF文档中。 问题答案: 在iText 7中,该方法已成为区域中断的特殊

  • 问题内容: 如何使用iText签名pdf?我正在通过此LINK进行操作, 但不了解my_private_key.pfx。我真的需要数字签名证书吗?请澄清一下。提前致谢。 问题答案: 您在问题中提到的文档很好。您必须创建数字签名文件。 该链接具有使用PKCS文件和签署PDF文档的工具。它声称使用iText,因此您应该能够理解这些步骤。源代码在这里

  • 我正在使用iText向现有pdf文件添加文本。它适用于简单的pdf,但与AcroForms的pdf存在问题。 我的代码: 错误消息:“此文档在Adobe Acrobat Reader DC中启用了扩展功能。文档自创建以来已更改,扩展功能的使用不再可用。请与作者联系以获取此文档的原始版本。” 并且没有我想添加到文件中的文本 知道我错过了什么吗?

  • 首先,虽然我关注StackOverflow已经有相当一段时间了,但这是我第一次发布一些东西,所以如果我做错了或者不按规则做的话,请随时为我指出正确的方向。 我正在开发一个PDF数字签名应用程序,使用iText5,它依赖于一个外部服务,在我准备好PDF签名后提供一个签名哈希。 如iText文档中所述,在第一阶段,我准备了PDF(在最终实现中,所有PDF都可能是多签名的,因此我使用追加模式),如下所示

  • 问题内容: 我想使用itext生成pdf。我会在某些时候添加内容以进行分页。我需要插入几个单独的conenidos依赖源,所以我要求用户在单独的页面上插入。有任何想法吗??? 问题答案: 调用告诉iText将后续对象放置在新页面上。仅当您放置下一个对象时,才会真正创建新页面。另外,仅在当前页面不为空白时创建一个新页面;否则,仅创建一个新页面。否则,它将被忽略;您可以用来克服这一点。 请参见下面的链