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

如何重新排列PDF文件的页面?

孟子墨
2023-03-14
问题内容

我最后生成目录,我想在开始时移动目录。假设我的PDF中有16页,并且TOC从第13页开始到第15页结束。我想将TOC移到第二页,以便第一页保留为第1页,最后一页保留为第16页。这段代码没有给我我想要的东西:

public void changePagesOrder()  {
    try {
         PdfReader sourcePDFReader = new PdfReader(RESULT1);    
         int n = sourcePDFReader.getNumberOfPages();
         System.out.println("no of pages in pdf files..."+n);
         int totalNoPages=n;
         int tocStartsPage=13;

         sourcePDFReader.selectPages(String.format("%d-%d, 2-%d", tocStartsPage, totalNoPages-1, tocStartsPage -2));
         PdfStamper stamper = new PdfStamper(sourcePDFReader, new FileOutputStream(RESULT2));
         stamper.close();

         System.out.println("pdf changes are done.....");
    }
    catch(Exception ex) {
    }
}

请提出一些解决方案。


问题答案:

您的公式是错误的。你有:

sourcePDFReader.selectPages(String.format("%d-%d, 2-%d", tocStartsPage, totalNoPages-1, tocStartsPage -2);

但这会将您的目录放在第一页。根据您的描述,这不是您想要的。

您想要这样的东西:

PdfReader reader = new PdfReader(baos.toByteArray());
int startToc = 13;
int n = reader.getNumberOfPages();
reader.selectPages(String.format("1,%s-%s, 2-%s, %s", startToc, n-1, startToc - 1, n));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();

代码使用测试ReorderPage在16页PDF文件例如,具有文本Page 1Page 2......,Page 16作为内容。结果是以下PDF:(reordered.pdf)
[http://itextpdf.com/sites/default/files/reordered.pdf]

页面现在按此顺序排列:第1页,第13页,第14页,第15页,第2页,第3页,第4页,第5页,第6页,第7页,第8页,第9页,第10页,第11页第12页,第16页。这是您在问题中描述的顺序。

更新:

在一条评论中,您正在询问String.format()在这种情况下如何工作。

让我们看看我们首先要实现的目标。我们的页面顺序如下:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

我们想像这样对它们重新排序:

1, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16

这意味着我们需要以下模式:

1, 13-15, 2-12, 16

这是一种硬编码模式,其中两个变量很重要:

  • 目录的开始:第13页(startToc
  • 最后一页:16(n

从这些变量中,我们可以得出另外两个变量:

  • 目录的最后一页。这是最后一页减去一页,即16-1 = 15(n - 1
  • 目录前的最后一页:13-1 = 12(startToc - 1

我们现在可以这样重写模式:

1, startToc-(n - 1), 2-(startToc - 1), n

我们需要将其设置为String,这就是为什么我们使用String.format()

String.format("1,%s-%s, 2-%s, %s", startToc, n-1, startToc - 1, n)

的第一次出现%s由后面的第一个参数替换String,第二次出现%s由后面的第二个参数替换String,依此类推…

如果startToc = 13n = 16,则结果为:

1, 13-15, 2-12, 16


 类似资料:
  • 问题内容: 我需要移动现有列的位置(以获得更好的可见性)。 如何做到这一点而又不影响数据? 问题答案: 修改也可以。看一看:

  • 问题内容: df =DataFrame({‘a’:[1,2,3,4],’b’:[2,4,6,8]}) >>> df[‘x’]=df.a + df.b >>> df[‘y’]=df.a - df.b >>> df a b x y 0 1 2 3 -1 1 2 4 6 -2 2 3 6 9 -3 3 4 8 12 -4 现在,我想重新排列列顺序,按如下方式使“ x”,“ y”列成为第一列和第二列: 但

  • 问题内容: 如果我有列表,如何以任意方式重新排序商品? 编辑:我不想洗牌。我想以预定义的方式对它们进行重新排序。(例如,我知道旧列表中的第3个元素应成为新列表中的第一个元素) 问题答案: 你可以这样

  • 我有一个PDF文件,我想创建两个新的文件的基础上,原来的文件。第一个新文件应该得到原始文件的第1、2和4页,第二个新文件应该得到原始文件的第3页。在PHP7.3中这样做的最好方法是什么?我在这里发现了一个旧库,但我不想把这样一个旧库添加到我的代码中。在此基础上,我找到了一些云解决方案,但这也不是我想要的。没有简单的“现代”解决方案吗?

  • 问题内容: 我正在使用 itext pdf 库。谁能知道我如何在现有的pdf中移动页面? 实际上,我想 在文件开头移动最后几页。 它类似于下面的内容,但我不知道它是如何工作的。 谁能详细解释一下? 问题答案: 该方法在我的书的第6章中进行了说明(请参见第164页)。在代码片段6.3和6.11的上下文中,它用于减少由或消耗的正在读取的页面数。但是,它也可以用于重新排序页面。首先让我解释一下语法。 该

  • 我有一个pdf,里面总共有6页的图片。我想将第1页和第2页合并为单个pdf,以此类推,共3到6页。 我将所有6页的pdf拆分为单独的pdf。 从PyPDF2导入操作系统导入PdfFileReader、PdfFileWriter pdf_splitter: fname=os.path.splitext(os.path.basename(path))[0] if name=='main': path=