Mac OS X: Jak scalić pliki pdf w katalogu zgodnie z ich nazwami

30

Chcę scalić kilkaset plików pdf automatycznie w katalogu zgodnie z ich nazwami.

Na przykład

Pliki 1000.1.pdf 1000.2.pdf 1000.3.pdf 1000.x.pdf powinny zostać połączone w 1000.pdf

i

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

Nie chcę używać rozwiązań opartych na programie Preview / Automator (jeśli jest dostępny), ponieważ w porównaniu do oprogramowania innych firm, takiego jak Adobe Acrobat lub PDFpen, często łączenie plików pdf (w zależności od dokumentów źródłowych) powoduje znaczny wzrost rozmiaru pliku (patrz np. Co powoduje wzrost rozmiaru pliku PDF podczas zapisywania w podglądzie? )

Czy masz jakieś rekomendacje? Dziękuję Ci!

Lejonet
źródło
Łączenie plików PDF zawsze zwiększa rozmiar pliku, z czym dokładnie masz problem?
nohillside
1
@patrix Mówię o setkach plików do scalenia. Jak wspomniano powyżej, może istnieć znaczny wzrost wielkości pliku za pomocą różnych narzędzi zawartych w Mac OS X. Dlaczego powinienem chcieć scalonego pliku tekstowego ze wzrostem wielkości czasami o kilkaset procent ?
lejonet
2
@patrix, lejone8 ​​chce mieć automatyczne scalanie plików PDF, ale w stosunku 1 + 1 = 2, a nie z 1 + 1 = 5? lub więcej w rozmiarze pliku. Ponadto lejonet8 wyraźnie podkreśla, że ​​korzystanie z produktów Apple jest niedopuszczalne ze względu na ich słabą wydajność w porównaniu z produktami innych firm! Nie wiem, dlaczego usuwasz moje komentarze, ale niech tak będzie.
Ruskes
1
Nie rozumiem żądania automatyzacji. Bardzo proste i szybkie jest organizowanie (sortowanie) plików według nazwy, a następnie zaznaczanie wszystkich w żądanej kategorii i łączenie jednym kliknięciem w jednym z dostępnych programów, takich jak odpowiedzi tutaj, lub w innych. Wynikowy rozmiar pliku zależy od typu i zawartości plików PDF, więc 1 + 1 = 2 nie jest możliwe. Lejonet8 wydaje się być rozłączony z argumentem, dlaczego programy Apple tworzą większe pliki pdf niż inne. Powodzenia w odpowiadaniu na to pytanie.
Ruskes
2
Czy możesz zredagować pytanie, aby bardziej szczegółowo opisać, co oznacza dla ciebie „zautomatyzowany” (wydaje się, że oznacza to różne rzeczy dla osób, które poświęciły czas na zaproponowanie rozwiązania twojego problemu)? Co powinno spowodować scalenie dokumentów? Których wzorców należy użyć, aby znaleźć pasujące pliki? Zwłaszcza odpowiedź DW wydaje się na pierwszy rzut oka wysoce zautomatyzowana, ale może Twoje pytanie kryje w sobie więcej, niż wiemy obecnie.
nohillside

Odpowiedzi:

25

Spróbuj pdftk . Jest to oprogramowanie wiersza polecenia, które może łączyć pliki PDF (i robić wiele innych rzeczy, ale nie ma to znaczenia tutaj). Możesz pobrać go z oficjalnej strony internetowej pdftk .

Przykładowa składnia:

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

utworzy plik new.pdfzawierający konkatenacji plików old1.pdf, old2.pdf, old3.pdf.

Aby rozwiązać problem, z przykładowymi nazwami plików:

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

i tak dalej. Możesz użyć skryptów powłoki, aby w razie potrzeby uczynić to całkowicie automatycznym (ale będziesz musiał poświęcić trochę czasu na naukę pisania skryptów powłoki).


Zakładając, że wszystkie pliki mają nazwy 1000.x, 2000.x itd., Skrypt powłoki może wyglądać w ten sposób

#!/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
źródło
Dziękuję za komentarz, ale nie wiem, gdzie jest przepływ pracy dla moich potrzeb (setki plików o podobnych nazwach, scalone zgodnie z tymi nazwami).
lejonet
1
@ lejonet8, właśnie tam świecą narzędzia wiersza poleceń! Zredagowałem swoją odpowiedź, aby dać ci przykład, jak to zrobić. Opracowanie dalszych szczegółów prawdopodobnie wykracza poza zakres tego pytania i dotyczy bardziej sposobu pisania skryptów powłoki.
DW
Dziękuję za Twoją odpowiedź. Niestety po uruchomieniu go na moich plikach pojawił się
lejonet
1
@ lejonet8 Może mógłbyś rozwinąć swoje wymagania automatyki nieco więcej w pytaniu . Czy szukasz czegoś takiego jak „Akcje folderów”? Co spowodowałoby przede wszystkim proces konkatenacji?
nohillside
3
@ lejonet8, Być może będziesz musiał trochę poeksperymentować, aby zobaczyć, jak sprawić, by pdftk działał dla Ciebie. Jeden komunikat o błędzie, bez kontekstu, niestety nie wystarcza, abym zdiagnozował problem. Spróbuj połączyć niektóre pary plików. Eksperyment. Sprawdź, czy możesz zdiagnozować, kiedy pdftk działa / nie działa, i przyczynę. Przeczytaj samouczek. Następnie zadaj pytanie dotyczące działania pdftk w odpowiedniej witrynie Stack Exchange lub innej stronie z pytaniami i odpowiedziami. FWIW, pdftk jest dla mnie bardzo niezawodny, współpracując z szeroką gamą plików pdf generowanych przez wiele różnych programów. Oczywiście twoje doświadczenie może się różnić.
DW,
52

W Automator.app ukryty jest skrypt Pythona, który dołącza pliki .PDF

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

Przykładowe użycie:

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf
akuhn
źródło
2
Dziękuję za Twoją odpowiedź. Nie mogę komentować zaplecza technicznego (może istnieć różnica w łączeniu w Automator i Preview). W zależności od plików źródłowych rozmiar pliku może również znacznie wzrosnąć. Właśnie przetestowałem go ponownie i łącznie cztery pliki o rozmiarze 12 mb zostały połączone z dokumentem o wielkości 32 mb. To jest niedopuszczalne.
lejonet,
Przepraszam, nic na to nie poradzę.
akuhn
4
Dodałem to polecenie jako alias do mojego ~/.bash_profilepliku w ten sposób: alias catpdf="/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf"mogę po prostu cdprzejść do katalogu zawierającego pliki PDF i uruchomić catpdf.
Stewart Macdonald
2
Upvoting za genialne użycie skryptu Python ukrytego w aplikacji! Zdecydowałem się jednak użyć pdftk, aby uzyskać bardziej niezawodne rozwiązanie.
Blairg23,
1
@lejonet Podstawą techniczną jest to, że oba używają tych samych ram (Quartz.CoreGraphics 10.11), jak się domyślacie. Można to zobaczyć w pierwszych wierszach skryptu `join.py '(instrukcje importu).
hans_meine
8

Możesz używać pdfuniterozproszonego z poppler. Możesz zainstalować za popplerpomocą Homebrew:

brew install poppler

A teraz użyj go:

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

popplerrównież pochodzi z innych komend: pdfdetach, pdffonts, pdfimages, pdfinfo, pdfseparate, pdftocairo, pdftohtml, pdftoppm, pdftops, pdftotext, oprócz pdfunite.

Flimm
źródło
0

pdftk już nie działa na El Capitan! (OS X 10.10)

Alternatywą jest pagemaster od PDFTron. Składnia będzie następująca:

pagemaster -m *.pdf -o output.pdf

Nie ma problemu zwiększenia rozmiaru pliku powyższego rozwiązania Automator, ponieważ wykorzystuje niestandardową bibliotekę PDF.

Uwaga: to nie jest darmowe narzędzie. Wersja demonstracyjna dodaje cienki znak wodny na każdej stronie.

antoine
źródło