PDF页面使用itext重新排序

时间:2014-02-06 10:21:38

标签: java itext itextpdf

我正在使用 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();

任何人都可以详细解释一下吗?

1 个答案:

答案 0 :(得分:5)

selectPages()方法在我的书chapter 6中有解释(参见第164页)。在代码段6.3和6.11的上下文中,它用于减少PdfReaderPdfStamperPdfCopy消费的页面数量。但是,它也可用于重新排序页面。首先让我解释一下语法。

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

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

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