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? )

Чи є якісь рекомендації? Дякую!


Об'єднання PDF-файлів завжди збільшуватиме розмір файлу, у чому саме полягає Ваша проблема?
nohillside

1
@patrix Я кажу про сотні файлів, які потрібно об'єднати. Як пов’язано вище, може відбутися значне збільшення розміру файлу за допомогою різних інструментів, включених до Mac OS X. Чому я повинен шукати об'єднаний текстовий файл із збільшенням розміру іноді на кілька сотень відсотків ?
lejonet

2
@patrix, lejone8 ​​хоче мати автоматичне об'єднання файлів PDF, але у співвідношенні 1 + 1 = 2, а не з 1 + 1 = 5? або більше у розмірі файлу. Крім того, lejonet8 чітко вказує на те, що використання продуктів Apple неприйнятне через низькі показники порівняно з продуктами сторонніх виробників! Я не знаю, чому ви видаляєте мої коментарі, але так і буде.
Ruskes

1
Я не розумію запит автоматизації. Впорядкувати (сортувати) файли за назвою дуже просто та швидко, після чого виберіть усі в потрібній категорії та зробіть злиття одним клацанням у будь-якій із доступних програм, таких як відповіді тут, або інших. Отриманий розмір файлу буде залежати від типу та вмісту файлів PDF, тому 1 + 1 = 2 неможливий. Lejonet8, здається, зависає від аргументу, чому програми Apple створюють великі файли pdf, ніж інші. Успіхів у відповіді на це.
Ruskes

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

Дякую за Ваш коментар, але я не бачу, де знаходиться робочий процес для моїх потреб (сотні файлів з подібними іменами, об'єднані відповідно до цих імен).
lejonet

1
@ lejonet8, саме там блищать інструменти командного рядка! Я відредагував свою відповідь, щоб навести приклад того, як це зробити. Опрацювання подальших деталей, ймовірно, виходить за рамки цього питання і стосується більше того, як писати сценарії оболонки.
DW

Спасибі за вашу відповідь. На жаль, запустивши його в моїх файлах, це призвело до цього повідомлення про помилку: Помилка: Неочікуваний текст у кінці сторінки сторінки, тут: 1000.pdf
lejonet

1
@ Lejonet8 Може бути , ви могли б уточнити ваші вимоги автоматизації трохи більше в цьому питанні . Шукаєте такі речі, як "Дії папок" чи подібні? Що в першу чергу спровокує процес конкатенації?
nohillside

3
@ lejonet8, Вам, можливо, доведеться трохи експериментувати, щоб дізнатися, як змусити pdftk працювати для вас. На жаль, одного повідомлення про помилку, без контексту, мені, на жаль, недостатньо для діагностики проблеми. Спробуйте об'єднати кілька пар файлів. Експеримент. Подивіться, чи можете ви встановити діагноз, коли pdftk працює / не працює, і причина. Прочитайте підручник. Потім розмістіть запитання про те, щоб зробити pdftk роботою на відповідному сайті Stack Exchange або на іншому веб-сайті із запитаннями та відповідями. FWIW, pdftk був для мене дуже надійним, працюючи з великою різноманітністю PDF-файлів, створених багатьма різними програмами. Звичайно, ваш досвід може відрізнятися.
DW

52

Є скрипт Python, прихований у Automator.app, який приєднує .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

2
Спасибі за вашу відповідь. Я не можу коментувати технічну основу (може бути різниця в об'єднанні в Automator і Preview). Залежно від вихідних файлів також може бути значне збільшення розміру файлу. Я просто перевірив його ще раз і чотири файли розміром 12 Мбіт загалом, де приєдналися до документа на 32 МБ. Це неприпустимо.
lejonet

Вибачте, не можу з цим допомогти.
акун

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 '(імпортувати заяви).
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! (ОС X 10.10)

Альтернатива - пагемастер від PDFTron. Синтаксис буде таким:

pagemaster -m *.pdf -o output.pdf

У ньому немає проблеми із збільшенням розміру файлу рішення Automator вище, оскільки він використовує власну бібліотеку PDF.

Примітка: це не безкоштовний інструмент. Демо-версія додає тонкий водяний знак на кожній сторінці.

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