Jak mogę scalić / przekonwertować wiele plików PDF w jeden duży plik PDF?
Próbowałem następujących czynności, ale zawartość pliku docelowego nie była zgodna z oczekiwaniami:
convert file1.pdf file2.pdf merged.pdf
Potrzebuję bardzo prostego / podstawowego rozwiązania wiersza poleceń (CLI). Najlepiej byłoby, gdybym mógł bezpośrednio przesłać dane wyjściowe scalania / konwersji pdf2ps
(jak pierwotnie próbowałem w moim poprzednio zadanym pytaniu tutaj: Linux piping (konwersja -> pdf2ps -> lp) ).
linux
pdf
merge
command-line-interface
alkohol
źródło
źródło
Odpowiedzi:
Biorąc pod uwagę, że
pdfunite
jest to część popplera, ma większą szansę na zainstalowanie, użycie jest również prostsze niżpdftk
:źródło
pdfunite *.pdf out.pdf
zakładając, że w tym katalogu nie ma innego pliku pdf, a ich kolejność jest zachowana przez „*”. Jeśli nie jest zachowany, użycie zakresów: nazwa_pliku {0..9} .pdf rozwiązuje go.Wypróbuj dobry ghostscript:
lub nawet w ten sposób dla ulepszonej wersji plików PDF o niskiej rozdzielczości (podziękowania dla Adriano za zwrócenie na to uwagi):
W obu przypadkach rozdzielczość wyjścia jest znacznie wyższa i lepsza niż w ten sposób za pomocą konwersji:
W ten sposób nie musisz instalować niczego innego, po prostu pracuj z tym, co już zainstalowałeś w swoim systemie (przynajmniej oba są domyślnie dostarczane w moim rhel).
Mam nadzieję że to pomoże,
AKTUALIZACJA: przede wszystkim dziękuję za wszystkie miłe komentarze !! tylko wskazówka, która może dla was zadziałać, po google znalazłem świetną sztuczkę, aby zmniejszyć rozmiar plików PDF, zmniejszyłem za pomocą jednego pliku PDF 300 MB do zaledwie 15 MB z akceptowalną rozdzielczością! a wszystko to z dobrym ghostscriptem, oto:
Twoje zdrowie!!
źródło
gs
działa bardzo szybko i dużo się kompresuje. Jednak jakość znacznie się poprawiła po użyciu tego parametru:-dPDFSETTINGS=/prepress
-dPDFSETTINGS=/prepress
ma to bardzo przyjemny efekt obracania stron, które są zbyt szerokie i wymuszają irytujące poziome paski przewijania..bash_profile
i masz ładny skrót:pdfmerge() { gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=$@ ; }
Oszczędza to trochę pisania, jeśli musisz często używać polecenia. Użycie wygląda następująco:pdfmerge merged.pdf mine1.pdf mine2.pdf
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf
Może zostać skrócony dogs -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -o merged.pdf mine1.pdf mine2.pdf
. Z dokumentacji : „Jako wygodny skrót możesz użyć-o
opcji, a następnie specyfikacji pliku wyjściowego, jak omówiono powyżej.-o
Opcja ta ustawia także opcje-dBATCH
i-dNOPAUSE
. Jest to szybki sposób na wywołanieghostscript
konwersji jednego lub więcej plików wejściowych.”Przepraszam, udało mi się znaleźć odpowiedź za pomocą Google i trochę szczęścia:)
Dla zainteresowanych;
Zainstalowałem pdftk (zestaw narzędzi pdf) na naszym serwerze Debiana i używając następującego polecenia osiągnąłem pożądany wynik:
LUB
To z kolei można przesłać bezpośrednio do pdf2ps.
źródło
gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf in3.pdf ...
pdftk file1.pdf file2.pdf cat output out.pdf
wyśle scalony plik jakoout.pdf
pdftk
nie jest dostępny dla systemów EL7 z powodu braku zależnościlibgcj
.Jest to najłatwiejsze rozwiązanie, jeśli masz wiele plików i nie chcesz wpisywać nazw jeden po drugim:
qpdf --empty --pages *.pdf -- out.pdf
źródło
Także
pdfjoin a.pdf b.pdf
stworzy noweb-joined.pdf
z treścią A.pdf i b.pdfźródło
Możesz użyć polecenia konwersji bezpośrednio,
na przykład
źródło
convert -compress lossless sub1.pdf sub2.pdf sub3.pdf merged.pdf
, ale wynikowy rozmiar pliku może być o wiele za duży. Sugerowałbymconvert -compress jpeg -quality 90 sub1.pdf sub2.pdf sub3.pdf merged.pdf
zamiast tego.pdfunite
scalanie całych plików PDF jest w porządku. Jeśli chcesz na przykład strony 2-7 z pliku1.pdf i strony 1,3,4 z pliku2.pdf, musisz użyćpdfseparate
do podzielenia plików na osobne pliki PDF dla każdej stronypdfunite
.W tym momencie prawdopodobnie potrzebujesz programu z większą liczbą opcji.
qpdf
to najlepsze narzędzie, jakie znalazłem do manipulowania plikami PDF.pdftk
jest większy i wolniejszy, a Red Hat / Fedora nie pakuje go z powodu jego zależności od gcj. Inne narzędzia PDF mają zależności Mono lub Python. Okazałoqpdf
się , że utworzyłem znacznie mniejszy plik wyjściowy niż używaniepdfseparate
ipdfunite
łączenie stron w 30-stronicowy plik wyjściowy PDF, 970 kB w porównaniu z 1 6450 kB. Ponieważ oferuje wiele innych opcji,qpdf
linia poleceń nie jest tak prosta; oryginalne żądanie scalenia pliku1 i pliku2 można wykonać za pomocąźródło
pdftk
z powodu swojej zależnościgcj
, dla której, jak sądzę, wsparcie zostało odrzucone. Pomimo wyszukiwania narzędzi do manipulacji pdf za pośrednictwempacman -Ss pdf
, tęskniłem za tym. Dzięki za tę odpowiedź! Powinienem otrzymywać znacznie więcej głosów pozytywnych, więc pojawia się tuż obok sugestii dotyczącychpdfunite
lubpdftk
.Apache PDFBox http://pdfbox.apache.org/
PDFMerger Ta aplikacja pobierze listę dokumentów pdf i scali je, zapisując wynik w nowym dokumencie.
źródło
Użyj narzędzi PDF z Pythona https://pypi.python.org/pypi/pdftools/1.0.6
Pobierz plik tar.gz, rozpakuj go i uruchom następującą komendę
Powinieneś zainstalować pyhton3 przed uruchomieniem powyższego polecenia
Te narzędzia obsługują poniżej
Możesz znaleźć więcej szczegółów w poniższym linku i jest to oprogramowanie typu open source
https://github.com/MrLeeh/pdftools
źródło
gs
(wszystkie warianty wymienione powyżej) proste połączenie dwóch plików PDF, 2 MB i 500 KB, zajęło kilka minut, a plik 40 MB!pdftools
kończy się natychmiast z identycznym rozmiarem pliku.Możesz użyć sejda-console , darmowego i open source. Rozpakuj i uruchom
sejda-console merge -f file1.pdf file2.pdf -o merged.pdf
Zachowuje zakładki, adnotacje linków, formularze akrobatyczne itp. W rzeczywistości ma wiele opcji, z którymi możesz grać, po prostu biegnij,
sejda-console merge -h
aby je wszystkie zobaczyć.źródło
Jeśli chcesz przekonwertować wszystkie pobrane obrazy do jednego pliku pdf, uruchom
convert img{0..19}.jpg slides.pdf
źródło
Popieram
pdfunite
zalecenie. Ja jednak dostawałemArgument list too long
błędy, gdy próbowałem scalić> 2k plików PDF.Zwróciłem się do Pythona o ten i dwa zewnętrzne pakiety: PyPDF2 (do obsługi wszystkich rzeczy związanych z plikami PDF) i natsort (do „naturalnego” rodzaju nazw plików katalogu). Jeśli to może komuś pomóc:
źródło
date +%s
.pdf' && pdfunite output - *. pdf output.pdf (To utworzy partie 500 plików przetwarzanych szeregowo, sprawi, że powstałe pliki tymczasowe zostaną posortowane w odpowiedniej kolejności i wygeneruj odpowiedni plik wyjściowy; po tym czasie musisz wyczyścić pliki tymczasowe)Oto metoda, której używam, która działa i jest łatwa do wdrożenia. Będzie to wymagało bibliotek fpdf i fpdi, które można pobrać tutaj:
źródło
Jestem stronniczy, będąc jednym z twórców PyMuPDF (powiązanie MuPDF w Pythonie).
Możesz łatwo robić z nim co chcesz (i wiele więcej). Szkielet kodu działa w następujący sposób:
O to chodzi. Dostępnych jest kilka opcji wyboru tylko zakresów stron, utrzymywania wspólnego spisu treści, odwracania sekwencji stron lub zmiany rotacji stron itp. Itp.
Jesteśmy na PyPi.
źródło
Podoba mi się pomysł Chasmo, ale wolę korzystać z zalet takich rzeczy jak
Podawanie wielu plików źródłowych
convert
prowadzi do scalenia ich we wspólny plik pdf. To polecenie scala wszystkie pliki z.pdf
rozszerzeniem w katalogu rzeczywistym do katalogumerged.pdf
nadrzędnego.źródło
$(ls *.pdf)
zwykłej wieloznacznej karty*.pdf
?ls *.pdf
wieloznacznego tracisz kontrolę nad kolejnością scalonych plików. W przykładzie następująca lista: 1.pdf, 2.pdf, 3.pdf, ..., 10.pdf, ..., 100.pdf zostanie faktycznie scalona jak 1.pdf, 10.pdf, 100. pdf, 2.pdf, 3.pdf (ze względu na domyślny sposób zamawiania plików w systemie Linux - tutaj znajdziesz więcej szczegółów na temat tego problemu - stackoverflow.com/q/22948042/1977012 ).Chociaż nie jest to rozwiązanie wiersza polecenia, może pomóc
macos
użytkownikom:źródło
Możesz zobaczyć użycie darmowych i otwartych narzędzi pdftools (zastrzeżenie: jestem ich autorem).
Jest to w zasadzie interfejs Pythona do lateksu
pdfpages
pakietu .Aby scalić pliki pdf jeden po drugim, możesz uruchomić:
Aby scalić wszystkie pliki pdf w katalogu, możesz uruchomić:
źródło