是否有命令行方法将多页 PDF 文件拆分为单页?

是否有命令行方法将多页 PDF 文件拆分为单页?

我有一个 6 页长的 PDF 文件,我想将其拆分为六个独立的 pdf(1.pdf、2.pdf、3.pdf),以便生成的每个文件代表输入的一页。我希望能够从命令行完成这个简单的任务。

答案1

在预览中打开 PDF,然后在视图菜单上选择缩略图。按住 Ctrl 键选择所需的页面,然后将其拖放到桌面。

答案2

这可以通过使用 来实现pdfseparate。您可以使用 homebrew 安装 poppler,方法是brew install poppler。这还将安装pdfseparate。要将 PDF 拆分document.pdf为单个页面1.pdf2.pdf等,请使用:

pdfseparate document.pdf %d.pdf

答案3

如果你有兴趣从命令行执行此操作,你可以看看Benjamin Han 的 splitPDF python 脚本来完成这项工作。例如:

splitPDF.py in.pdf 3 5

会将文件拆分in.pdf为 3 个文件,分别拆分为第 3 页和第 5 页。

答案4

如果您想要提取一系列页面,您可以使用以下脚本,调用方式如下(假设您将其保存到系统 PATH 上的某个位置的 pdfextract.py 文件中,例如 /usr/local/bin,并使用 chmod 744 pdfextract.py 为其分配执行权限):

pdfextract.py --file-in /path/to/large/pdf --file-out /path/to/new/pdf --start --stop

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import argparse
import os
import subprocess as sp


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--file-in', required=True, type=str, dest='file_in')
    parser.add_argument('--file-out', required=True, type=str, dest='file_out')
    parser.add_argument('--start', required=True, type=int, dest='start', default=-1)
    parser.add_argument('--stop', required=True, type=int, dest='stop', default=-1)

    args = parser.parse_args()
    assert os.path.isfile(args.file_in)
    assert not os.path.isfile(args.file_out)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))

    sp.check_call('pdfseparate -f {:d} -l {:d} {:s} /tmp/pdfseparate-%d.pdf'.format(args.start, args.stop, args.file_in), shell=True)

    cmd_unite = 'pdfunite '
    for i in range(args.start, args.stop + 1):
        cmd_unite += '/tmp/pdfseparate-{:d}.pdf '.format(i)
    cmd_unite += args.file_out
    sp.check_call(cmd_unite, shell=True)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))


if __name__ == "__main__":
    main()

相关内容