仅保留 PDF 中每个部分的最后一页?

仅保留 PDF 中每个部分的最后一页?

我有许多 PDF 文件,每个部分都有相同的幻灯片(或其变体)。(即:每个部分都有相同幻灯片的几乎相同的副本)。我想缩小 PDF 并删除多余的副本,每个部分只留下 1 页。

这是一个例子PDF。基本上,我想让他所做的事情自动化。

是否有任何工具,如 pdftk 或 pdfcrop 或 ghostscript,我可以用来只保留最后的每页部分PDF 中?命令行工具最好!

编辑:已上传我自己的例子. 这是一个图像展示问题。看看有 3 个页面的“标签”设置为 2。我们有 3 个页面的页面索引为 2,还有 3 个页面的页面索引为 3。我想保留页面索引为 2 的最后一页和页面索引为 3 的最后一页。我想对所有 PDF“部分”执行此操作,Acrobat 就是这么称呼它的!

答案1

我自己解决了这个问题。编写了 Python 代码来处理它。检索 PageLabels 会检索标签本身(可能是数字,也可能不是数字)以及所述标签开始的相应索引。我提取标签的起始索引,并假设一个部分或标签的结束发生在下一个标签/部分开始前 1 页。

#!/usr/bin/python

from PyPDF2 import PdfFileWriter, PdfFileReader
import numpy as np

def printf(format, *values):
    print(format % values )

with open("in.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()

    # The label indices occur @ even locations - generate array of form [0, 2, 4, 6, ...]
    indices = np.array(np.arange(0,np.shape(input1.trailer["/Root"]["/PageLabels"]["/Nums"])[0],2))

    # Assume end of preceding label = start of next label - 1
    pageIndices = np.array(input1.trailer["/Root"]["/PageLabels"]["/Nums"])[indices] - 1 

    # ignore the first index which is now a -1
    pageIndices = pageIndices[1:] 

    # there may be extra pages right after the start of the last label - add them
    pageIndices = np.append(pageIndices, np.arange(pageIndices[-1]+1, numPages))


    for _, v in enumerate(pageIndices):
        page = input1.getPage(v)
        output.addPage(page)

    with open("out.pdf", "wb") as out_f:
        output.write(out_f)

相关内容