更新了仅依赖的答案pdftk.exe
,而不调用 Ghostscript
用户@mmj 提供的答案过去对我来说很好用,但不知何故在 GS 版本 9.20 和 9.50 之间的某个地方停止了工作。我也知道@Adobe 提供的解决方案。但是,我喜欢通过选择一个或多个文件并右键单击 → 发送到,从 Windows (10) 资源管理器中完成重复性任务。这是一个 Python 脚本(与 3.8 兼容),它使用pdftk.exe
(用 2.02 测试)来计算页面总数并将所有页面提取到单个文件中。它应该接受多个 PDF 作为输入。确保你有 Python 并且pdftk.exe
在 PATH 中。
将其命名extract-pdf-pages-py.cmd
为shell:sendto
:
python %APPDATA%\Microsoft\Windows\SendTo\extract-pdf-pages-py.py %*
将以下内容放在extract-pdf-pages-py.py
同一文件夹中:
#!/usr/bin/python3
# put as extract-pdf-pages-py.py to shell:sendto
import os
import subprocess
import re
import sys
import mimetypes
def is_tool(name):
from shutil import which
return which(name) is not None
if not is_tool('pdftk'):
input('pdftk.exe not within PATH. Aborting...')
raise SystemExit("pdftk.exe not within PATH.")
sys.argv.pop(0)
for j in range(len(sys.argv)):
input_pdf = sys.argv[j]
if 'application/pdf' not in mimetypes.guess_type(input_pdf):
input(f"File {input_pdf} is not a PDF. Skipping...")
continue
savefile = input_pdf.rstrip('.pdf')
numpages = subprocess.Popen(f"pdftk \"{input_pdf}\" dump_data", shell=True, stdout=subprocess.PIPE)
output1 = str(numpages.communicate()[0])
output2 = re.search("NumberOfPages: ([0-9]*)", output1)
number_of_pages = int(output2.group(1))
for i in range(1, number_of_pages + 1):
os.system(f"pdftk \"{input_pdf}\" cat {i} output \"{savefile}\"{i:04d}.pdf")
我使用了这个答案中的代码(@Adobe 编写的脚本)和那个(is_tool
)。