Як швидко розділити файл 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.