Mac OS X: как объединить PDF-файлы в каталоге в соответствии с их именами

30

Я хочу объединить несколько сотен PDF-файлов в каталоге автоматически в соответствии с их именами.

Например

Файлы 1000.1.pdf 1000.2.pdf 1000.3.pdf 1000.x.pdf должны быть объединены в 1000.pdf

а также

2000.abc.pdf 2000.def.pdf 2000.ghi.pdf 2000.jkl.pdf 2000.5.pdf в 2000.pdf .

Я не хочу использовать решения, основанные на Preview / Automator (если доступны), потому что по сравнению со сторонним программным обеспечением, таким как Adobe Acrobat или PDFpen, слияние PDF-файлов часто (в зависимости от исходных документов) приводит к значительному увеличению размера файла (см., Например, Что приводит к увеличению размера файла PDF при сохранении в Preview? )

У вас есть какие-нибудь рекомендации? Спасибо!

lejonet
источник
Объединение PDF-файлов всегда увеличит размер файла. В чем именно заключается проблема?
nohillside
1
@patrix Я говорю о сотнях файлов для объединения. Как указано выше, может быть значительное увеличение размера файла с помощью различных инструментов, включенных в Mac OS X. Зачем мне нужен объединенный текстовый файл с увеличением размера иногда на несколько сотен процентов ?
lejonet
2
@patrix, lejone8 ​​хочет автоматически объединять PDF-файлы, но с соотношением 1 + 1 = 2, а не с 1 + 1 = 5? или больше в размере файла. Кроме того, lejonet8 ясно указывает на то, что использование продуктов Apple недопустимо из-за их низкой производительности по сравнению с продуктами сторонних производителей! Я не знаю, почему вы удаляете мои комментарии, но так и будет.
Рускес
1
Я не понимаю запрос автоматизации. Это очень просто и быстро организовать (отсортировать) файлы по имени, затем выбрать все в требуемой категории и выполнить объединение одним щелчком мыши в любой из доступных программ, таких как отвеченные здесь, или других. Размер получаемого файла будет зависеть от типа и содержимого файлов PDF, поэтому 1 + 1 = 2 невозможно. Похоже, что lejonet8 зависает от аргумента, почему программы Apple создают PDF-файлы большего размера, чем другие. Удачи в ответе на это.
Рускес
2
Можете ли вы отредактировать вопрос, чтобы описать более подробно, что значит «автоматизированный» для вас (кажется, что для людей, которые нашли время, чтобы предложить решение вашей проблемы, разные вещи)? Что должно спровоцировать слияние документов? Какие шаблоны следует использовать для поиска подходящих файлов? На первый взгляд ответ DW кажется на первый взгляд очень автоматизированным, но, возможно, за вашим вопросом стоит нечто большее, чем мы знаем сейчас.
nohillside

Ответы:

25

Попробуй pdftk . Это программное обеспечение командной строки, которое может объединять PDF-файлы (и делать много других вещей, но это не имеет значения). Вы можете скачать его с официальной веб-страницы pdftk .

Пример синтаксиса:

pdftk old1.pdf old2.pdf old3.pdf cat output new.pdf

создаст файл new.pdf, содержащий конкатенацию файлов old1.pdf, old2.pdf, old3.pdf.

Чтобы решить вашу проблему, с вашими примерами имен файлов:

pdftk 1000.*.pdf cat 1000.pdf
pdftk 2000.*.pdf cat 2000.pdf

и так далее. При желании вы можете использовать сценарии оболочки, чтобы сделать это полностью автоматическим (но вам придется потратить немного времени на собственное обучение написанию сценариев оболочки).


Предполагая, что все файлы имеют имена 1000.x, 2000.x и т. Д., Сценарий оболочки может выглядеть примерно так

#!/bin/bash

for n in {1..9}; do
    if [[ -r ${n}000.1.pdf ]]; then
        rm -f ${n}000.pdf
        pdftk ${n}000.*.pdf cat ${n}000.pdf && mv ${n}000.*.pdf ~/.Trash/
    fi
done
DW
источник
Спасибо за ваш комментарий, но я не вижу, где находится рабочий процесс для моих нужд (сотни файлов с похожими именами, объединенные в соответствии с этими именами).
lejonet
1
@ lejonet8, это именно то, где инструменты командной строки сияют! Я отредактировал свой ответ, чтобы дать вам пример того, как это сделать. Выработка дополнительных деталей, вероятно, выходит за рамки этого вопроса и больше относится к тому, как писать сценарии оболочки.
DW
Спасибо за ваш ответ. К сожалению, запуск его на моих файлах привел к появлению этого сообщения об ошибке: Ошибка: неожиданный текст в конце диапазона страниц, здесь: 1000.pdf
lejonet
1
@ lejonet8 Может быть , вы могли бы уточнить ваши требования автоматизации немного больше в этом вопросе . Вы ищете такие вещи, как «Действия с папками» или что-то подобное? Что будет инициировать процесс объединения в первую очередь?
nohillside
3
@ lejonet8, вам, возможно, придется немного поэкспериментировать, чтобы понять, как заставить pdftk работать на вас. К сожалению, одного сообщения об ошибке без контекста недостаточно для диагностики проблемы. Попробуйте объединить несколько пар файлов. Эксперимент. Посмотрите, сможете ли вы диагностировать, когда pdftk работает / не работает, и причину. Прочитайте учебник. Затем опубликуйте вопрос о том, как заставить pdftk работать, на подходящем сайте Stack Exchange или другом сайте вопросов и ответов. FWIW, pdftk был очень надежным для меня, работая с широким разнообразием файлов PDF, созданных многими различными программами. Конечно, ваш опыт может отличаться.
DW
52

В Automator.app скрыт скрипт Python, который объединяет .PDF-файлы

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --help
Usage: join [--output <file>] [--shuffle] [--verbose]

Пример использования:

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf
akuhn
источник
2
Спасибо за ваш ответ. Я не могу комментировать технический фон (может быть разница в объединении в Automator и Preview). В зависимости от исходных файлов размер файла может быть значительно увеличен. Я только что проверил это снова и четыре файла размером 12 МБ, которые были объединены в документ размером 32 МБ. Это неприемлемо.
lejonet
Извините, не могу помочь с этим.
Akuhn
4
Я добавил эту команду в качестве псевдонима в своем ~/.bash_profileфайле следующим образом: alias catpdf="/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf"я могу просто cdзайти в каталог с PDF-файлами и запустить catpdf.
Стюарт Макдональд
2
Голосование за оригинальное использование скрипта Python, спрятанного в приложении! Я решил использовать pdftk, хотя для более надежного решения.
Blairg23
1
@lejonet Технический фон заключается в том, что оба используют одни и те же фреймворки (Quartz.CoreGraphics на 10.11), как вы уже догадались. Это видно по первым строкам скрипта join.py (операторы import).
hans_meine
8

Вы можете использовать pdfuniteраспределенный с poppler. Вы можете установить popplerс Homebrew:

brew install poppler

А теперь используйте это:

pdfunite input1.pdf input2.pdf input3.pdf output.pdf

popplerтакже поставляется с этими другими командами: pdfdetach, pdffonts, pdfimages, pdfinfo, pdfseparate, pdftocairo, pdftohtml, pdftoppm, pdftops, pdftotext, в дополнение к pdfunite.

Флимм
источник
0

pdftk больше не работает на El Capitan! (OS X 10.10)

Альтернативой является мастер страниц из PDFTron. Синтаксис будет:

pagemaster -m *.pdf -o output.pdf

Он не имеет проблемы увеличения размера файла решения Automator выше, так как он использует пользовательскую библиотеку PDF.

Примечание: это не бесплатный инструмент. Демо-версия добавляет тонкий водяной знак на каждой странице.

Антуан
источник