我有许多 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)