Ответы:
Взгляните на «Объединение файлов 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 ... ...
, и без него, жесткая ссылка создается. Возможно, это не имеет значения, хотя я бы упомянул это.
Просто установите Ghostscript, используя Brew с командой:
brew install gs
Затем выполните команду со всеми перечисленными файлами:
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf
gs
поэтому для дальнейшего использования это решение будет столь же удобным.
Python-скрипт Apple в действии Automator очень медленный, поскольку он использует API-интерфейсы CoreGraphics CGPDFDocument, а не более новую платформу PDFKit. Он также импортирует всю библиотеку CoreGraphics, а не только необходимые API.
Альтернативный, более быстрый скрипт на Python можно найти здесь:
Этот скрипт также добавляет оглавление в PDF, перечисляя каждый файл компонента (и объединяя существующие ToC), чего нет у Apple.
Его можно использовать в командной строке (с именами файлов PDF в качестве аргументов) или в действии сценария оболочки Automator для создания Quick Action / Service для Finder.
time
команду в сочетании с вашим joinpdfs.py
сценарием , встроенным join.py
сценарием и двумя файлами ~ 200 МБ каждый, ваш joinpdfs.py
сценарий был на 9 секунд быстрее встроенного join.py
сценария , и, конечно, было добавлено преимущество в том, что TOC не поврежден , Ницца! +1
FWIW, я написал небольшую небольшую программу, которая позволяет вам делать это, не полагаясь на внешние зависимости, такие как системный питон и тому подобное. На github здесь: pdfmerge и довольно простой в использовании, может либо передать ему список файлов PDF для слияния pdfmerge in1.pdf in2.pdf ... out.pdf
, либо передать ему список файлов для слияния в текстовом файле, например, pdfmerge infileslist.txt out.pdf
либо просто сделать текущий каталог в порядке ABC pdfmerge out.pdf
. Я написал его как учебный проект, так что он бесплатный и открытый, и вы можете получить последний бинарный файл на вкладке релизов на github.
join.py
скрипт из действия Объединить PDF-страницы в Automator, больше ничего не нужно загружать или устанавливать, но чтобы использовать ваш, мне придется скачать и установить его. Также не увидел двоичный файл по ссылке.
опираясь на на @Bartosz Petryński «s хороший ответ , мы можем сделать собственную минимальную cpdf
программу на вершине GhostScript:
brew install gs
cpdf () {
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$1" "${@:2}"
}
тогда используйте это как:
cpdf merged.pdf file1.pdf file2.pdf file3.pdf
Я нашел бесплатный инструмент командной строки Coherent PDF, чтобы быть лучшим вариантом. Это очень быстро, без потерь и не портит ориентацию или гиперссылки, как некоторые другие решения. Формат:
cpdf file1.pdf file2.pdf -o output.pdf