Як швидко розділити файл PDF на одні сторінки (тобто з командного рядка Terminal)?


23

У мене PDF-файл довжиною 6 сторінок, який я хочу розділити на 1.pdf, 2.pdf, 3.pdf тощо.

Попередній перегляд не спрацьовує для цього дивно (якщо я щось не пропускаю).

Мені б хотілося виконати це просте завдання з командного рядка, але в цей момент я візьму все, що виконає роботу (не завантажуючи схематичне програмне забезпечення)

FYI http://users.skynet.be/tools/ не працює, як рекламується.


2
Хороше рішення в командному рядку - це відповідь SE . Ви можете встановити ghostscript за допомогою Homebrew .
fideli

Відповіді:


21

Відкрийте PDF у попередньому перегляді, а потім у меню перегляду виберіть мініатюри. Ctrl виберіть потрібні сторінки, перетягніть їх на робочий стіл.


1
Це добре спрацювало. Мені знадобилося приблизно 30 секунд, щоб зробити це після того, як він промахувався приблизно протягом 30 хвилин. Деякі люди використовують цю техніку спільно з Автоматизатором, але я її ще не пробував.
користувач391339

35

Цього можна досягти, використовуючи pdfseparate. Ви можете встановити poppler з домашньою мовою, автор brew install poppler. Це також встановить pdfseparate. Для того, щоб розділити PDF document.pdfна на окремі сторінки 1.pdf, 2.pdfі т.д. Використання:

pdfseparate document.pdf %d.pdf

1
Щойно встановлений popplerдень тому за можливість перетворення PDF-файлів у SVG pdf2svg. Не помітив, що popplerйде з pdfseparateкомандою. Оскільки прийнята відповідь вище (перетягування та видалення всіх сторінок PDF з попереднім переглядом на робочий стіл) вимагає від мене «натиснути навколо», і оскільки мені подобаються рішення на терміналі, які працюють автоматично лише одним командним рядком, pdfseparateсаме те, що мені потрібно. Дякую за цей підказ!
Арвід

Цікаво, що pdfseparate створює pdfs, загальний розмір якого набагато більший, ніж розмір оригінального pdf. У мене був документ на 400 сторінок з 1,9 Мб. Після розколу я отримав щось близько 60 Мб.
Костянтин

5

Якщо вам цікаво зробити це в командному рядку, ви можете подивитися сценарій піттона splitPDF Бенджаміна Хана, щоб виконати цю роботу. Наприклад:

splitPDF.py in.pdf 3 5

розділить файл in.pdfна 3 файли, розділивши на сторінки 3 і 5.


Це добре і трохи гнучкіше в тому, що ви можете отримати, ніж pdfseparate вище. Хоча це в основному для розбиття PDF на патрони сторінок, якщо ви хочете розділити кожну сторінку, ви можете легко використовувати seqдля створення діапазону чисел у вашій команді. Спасибі!
дег

1
щось на кшталт python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)працював для мене
1616

1
Слова чудові. Я підтверджую, що це працює безпосередньо на MacOS 10.13.3
MichaelCodes

1

Іншу альтернативу дивіться у цій відповіді . Для цього використовуються інструменти командного рядка ImageMagick .

convert x.pdf -quality 100 -density 300x300 x-%04d.pdf

Однак ви повинні бути обережними з якістю.


1

Якщо ви хочете витягти діапазон сторінок, ви можете скористатись наступним скриптом, який ви називаєте так (припустимо, що ви збережете його для файлу pdfextract.py десь на PATH вашої системи, наприклад / usr / local / bin, і призначите його виконання дозвіл з chmod 744 pdfextract.py):

pdfextract.py - файл-в / шлях / до / великий / pdf --файл-вихід / шлях / до / новий / pdf - початок - стоп

#!/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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.