Як можна комбінувати кілька PDF-файлів за допомогою командного рядка?


52

Чи є швидкий однолінійний комбінат для об'єднання декількох pdfs в один?

Я знаю, що це можна зробити за допомогою Preview.app

Відповіді:


75

Погляньте на "Об'єднання файлів PDF в командному рядку в OSX" в " Приєднання файлів PDF в OS X" з командного рядка .

Виявляється, що від Tiger далі OSX поставляється із сценарієм Python, який робить саме те, що потрібно. Сценарій вже виконується, і Python попередньо встановлений на OS X, тому все, що вам потрібно зробити, це запустити термінал і набрати текст

"/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py" -o PATH/TO/YOUR/MERGED/FILE.pdf /PATH/TO/ORIGINAL/1.pdf /PATH/TO/ANOTHER/2.pdf /PATH/TO/A/WHOLE/DIR/*.pdf

Також на пов'язаній сторінці він пропонує зробити символьне посилання на join.pyфайл, щоб полегшити введення тексту, однак вони пропущено -sв ln -s ... ..., і без нього створюється жорстке посилання. Напевно, це не мало б значення, однак я хотів би згадати про це.


Працювали для мене. Однією чудовою справою є уникнення необхідності встановлення додаткових пакетів, які ви більше ніколи не можете використовувати. Спасибі.
gvrocha

Працював для мене на El Capitan 10.11.6.
пабуїсон

2
Попередження : у мене були PDF-файли, де він переплутав обертання кількох сторінок
adius

28

Просто встановіть Ghostscript за допомогою Brew з командою:

brew install gs

Потім запустіть команду зі всіма переліченими файлами:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf

У OS X / macOS вже споконвічно є спосіб комбінувати PDF-файли з командного рядка, тому навіщо витрачати час на необхідність спочатку встановити Інструменти командного рядка для Xcode, Homebrew, а потім Ghostscript, щоб зробити щось, що вже можна зробити в оригіналі, не маючи встановити будь-який з вищезгаданих пакетів?
користувач3439894

5
@ user3439894 багато людей вже встановили ці загальні пакети і вже використовують, gsтому для подальшого використання це рішення було б так само зручно.
htor

1
@ user3439894 Я бачу плутанину. Я звертаюся до вас, тому що ви ставили під сумнів значення цієї відповіді. використання homebrew для встановлення утиліт командного рядка дуже поширене в наші дні, тому я б не називав це марною тратою часу. для багатьох людей ця відповідь забезпечує настільки ж хороше рішення, як і ваша.
htor

7
це працювало для мене, команда py не зробила
Thieme Hennis

2
Відповідно до коментаря Тієма Генніса, сценарій join.py виходить з ладу для мене у Високій Сьєррі з помилкою сегментації. Але gs працює чудово.
Аркдейл

2

Сценарій Python від Apple в дії Automator дуже повільний, оскільки він використовує API CGPDFDocument CoreGraphics, а не новіші рамки PDFKit. Він також імпортує всю бібліотеку CoreGraphics, а не лише необхідні API.

Альтернативний, швидший сценарій python, можна знайти тут:

Цей скрипт також додає до PDF зміст, в якому перерахований кожен компонентний файл (і об'єднує наявні ToC), чого Apple не має.

Її можна використовувати в командному рядку (з аргументами PDF у вигляді аргументів) або в сценарії оболонки автоматизатора, щоб зробити швидку дію / послугу для Finder.


1
Як тест, використовуючи time команду спільно з вашим joinpdfs.py сценарієм , вбудованим join.py сценарієм та двома файлами ~ 200 МБ кожен, ваш joinpdfs.py сценарій був на 9 секунд швидшим, ніж вбудований join.py сценарій , звичайно ж, додатковою перевагою від недоторканості TOC . Приємно! +1
користувач3439894

BTW 9 секунд може виглядати не так багато, але це був 1/3 загального часу вбудованого сценарію , тому на 1/3 час швидше є значним.
користувач3439894

1

FWIW, я написав невелику маленьку програму, яка дозволяє вам це робити, не покладаючись на зовнішні залежності, такі як системний пітон і подібні. На github тут: pdfmerge і досить простий у використанні, ви можете або передати йому список файлів PDF для об'єднання pdfmerge in1.pdf in2.pdf ... out.pdf, передати йому список файлів для об'єднання у текстовий файл, pdfmerge infileslist.txt out.pdfабо просто виконати поточний каталог у порядку ABC pdfmerge out.pdf. Я написав це як навчальний проект, настільки вільний і відкритий, і ви можете отримати останню бінарну інформацію на вкладці випусків на github.


Оскільки Python за замовчуванням встановлений у macOS і є частиною його, я не обов'язково вважаю це зовнішньою залежністю як такою. Іншими словами, щоб використовувати те, що вже доступно у вікні в macOS для приєднання файлів PDF, join.pyскрипт із дії Combine PDF Pages в Automator, більше нічого не потрібно завантажувати чи встановлювати, але щоб використовувати ваше, я повинен був би завантажте та встановіть його. Також посилання не бачили двійковий файл.
користувач3439894

1
До речі, я ознайомився з вашим кодом, і цікаво, що ви використовуєте два основних компоненти (Foundation та Quartz), які також використовує сценарій python. Чи є у вашому коді щось, що по суті краще перекидати користування ним над тим, що вже пропонується за замовчуванням, не завантажуючи нічого, тоді як з вашим потрібно зробити додаткові та додаткові кроки для його використання?
користувач3439894

1
Для людей, які не використовують Python ні для чого іншого, можливо, має більше сенсу використовувати наданий Apple сценарій. Але для людей, які використовують Python, може бути великим клопотом керувати кількома версіями (система Python 2.7, сучасний Python 3.x) з різними установками модулів та іншим. Наприклад, на моїй машині мій $ PATH вказує на зовсім інший Python. Це можна вирішити розумним використанням шебангів та іншого, але мені це дратує. YMMV, звичайно. Також пряме посилання на сторінку завантаження бінарних файлів: github.com/paultopia/pdfmerge/releases/latest
Пол Гоудер


0

Я знайшов безкоштовний інструмент узгодженого командного рядка PDF найкращим варіантом. Це дуже швидко, без втрат і не псує орієнтацію чи гіперпосилання, як це робили деякі інші рішення. Формат:

cpdf file1.pdf file2.pdf -o output.pdf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.