PDF页面使用itext重新排序

我正在使用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的上下文中,它用于减少PdfReader读取的页面数量,以供PdfStamperPdfCopy 。 但是,它也可用于重新排序页面。 首先让我解释一下语法。

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

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

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

 [!][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页开始的TOC,并且您想将此TOC移动到第一页,那么您需要这样的内容: 8-10, 1-7 ,或者如果toc等于8且n等于10:

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

有关format()方法的详细信息,请参阅String的API文档和Format String语法 。