Jak scalić kilka plików PDF?


Odpowiedzi:


209

PDF-Shuffler Zainstaluj Shuffler PDF

Jeśli potrzebujesz narzędzia z prostym GUI, wypróbuj pdfshuffler . Umożliwia łączenie plików PDF, a także przestawianie i usuwanie stron. W przypadku przetwarzania wsadowego i / lub bardziej skomplikowanych zadań pdftk jest oczywiście bardziej wydajny.

Zrzut ekranu z PDF-Shuffler


Próbowałem tego - nie zadziałało 10.04
David Oneill

W dniu 12.04 pdfshuffler zawsze narzeka, że ​​istnieje „zbyt wiele wartości do rozpakowania”, co czyni go bezużytecznym.
znika

8
Instaluje się i działa jak urok 14.04. Wielkie dzięki!!
Zlatty

1
Mogę również potwierdzić, że pdfshufflerdziała dobrze w dniu 14.04 amd64.
conualfy

2
Działa również świetnie 16.04.1
Sanjay Manohar

333

pdftkZainstaluj pdftk

Aby scalić dwa pliki pdf file1.pdfi file2.pdf:

pdftk file1.pdf file2.pdf cat output mergedfile.pdf

Więcej informacji dostępnych tutaj Droga powrotna .


5
pdftk jest błędny - bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908 . gs może być powolny, ale działa idealnie [odpowiedź IgnitE]
Pushpak Dagade

@PushpakDagade ghostscript miesza się z adnotacjami, zwłaszcza komentarzami, które zostały zaznaczone (pole wyboru zaznaczone znacznikiem wyboru), nie będzie już tego znaku wyboru. Nie wiem, jak to obejść. Ponadto, jeśli scalisz plik PDF w wersji 1.5 + 1.6, formatem wyjściowym będzie domyślnie 1,4. To dziwne zachowanie.
Jonathan Komar

2
pdftk ma niezwykłe zastosowanie, w którym polecenia cati outputnastępujące po nim argumenty wejściowe są różne, a następnie ponownie argument wyjściowy.
Jeff Puckett

3
Wygląda na to, że pakiet został usunięty w 2018.04.
Nicolas Raoul,

1
@NicolasRaoul Właśnie pobrałem go jako instalację błyskawiczną.
Maks.

161

Ghostscript to pakiet (domyślnie dostępny w Ubuntu), który umożliwia przeglądanie lub drukowanie plików PostScript i PDF do innych formatów lub konwersję tych plików do innych formatów.
Aby użyć Ghostscript do łączenia plików PDF, wpisz coś takiego:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -sOutputFile=finished.pdf  file1.pdf file2.pdf

Oto krótkie wyjaśnienie polecenia:

gs         starts the Ghostscript program.
-dBATCH    once Ghostscript processes the PDF files, it should exit.
           If you don't include this option, Ghostscript will just keep running.
-dNOPAUSE  forces Ghostscript to process each page without pausing for user interaction.
-q         stops Ghostscript from displaying messages while it works
-sDEVICE=pdfwrite 
           tells Ghostscript to use its built-in PDF writer to process the files.
-sOutputFile=finished.pdf
           tells Ghostscript to save the combined PDF file with the specified name.
-dAutoRotatePages=/None
           Acrobat Distiller parameter AutoRotatePages controls the automatic orientation selection algorithm: For instance: -dAutoRotatePages=/None or /All or /PageByPage.

Twoje pliki wejściowe nawet nie muszą być plikami PDF. Możesz także użyć plików PostScript lub EPS lub dowolnej ich kombinacji.

Z Ghostscript możesz zrobić wiele. Możesz przeczytać jego dokumentację, aby uzyskać więcej informacji.

Źródło


2
To prawda, ale jest niesamowicie wolny. Właśnie próbowałem połączyć 45 x 400 KB, jednostronicowe pliki PDF. pdftkzajęło 0m0.484s, gszajęło 1m32.898s (to prawie 200x wolniej) Plik z gsbył jednak o około 21% mniejszy.
aidan

2
to polecenie działa również, jeśli używasz symbolu wieloznacznego do łączenia listy plików. przykładowo wymienić file1.pdf file2.pdfzfile*.pdf
Antonios Hadjigeorgalis

2
Dla mnie gspracowałem z niektórymi „niezgodnymi” plikami PDF, pdftkktóre po prostu działałyby wiecznie.
ntc2

1
Użyj -dPDFSETTINGS=/prepressopcji poprawy jakości. Wszystkie dzięki dzięki pierwotnemu współpracownikowi
Mohnishowi

6
@AntoniosHadjigeorgalis tylko w celach informacyjnych i dobrego zrozumienia: to nie jest komenda wspieranie symbole wieloznaczne, to faktycznie powłoka wymianie file*.pdfz file1.pdf file2.pdfprzed przekazaniem argumenty do komendy.
Midgard

81

Korzystasz również z pdfunite do łączenia dokumentów pdf:

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

12
OSTRZEŻENIE: Istniejący plik out.pdfzostanie zastąpiony bez ostrzeżenia, więc pdfunite *.pdfnie będzie działać zgodnie z oczekiwaniami.
krlmlr

1
@krlmlr Zawsze możesz umieścić dane wyjściowe w innym katalogu.
BЈовић

W porządku, cprównież zastępuje ostatni argument bez ostrzeżenia. To jest tylko dla pędzących użytkowników (jak ja) - miałem szczęście, że miałem kopię zapasową tego pliku ...
krlmlr

1
Upvote: Jest to proste narzędzie wiersza polecenia bez graficznego interfejsu użytkownika, jak wiele innych odpowiedzi tutaj. Ładnie ujmuje złożoność (w dużej mierze równoważnego) rozwiązania GhostScript.
tripleee

1
Jest to również bardzo szybkie. Dobrze działa. Na bardzo wolnym serwerze (aws t1.micro), gs zajmuje 9 sekund, pdftk zajmuje 4 sekundy, a ten pdfunite zajmuje 0,9 sekundy na scalenie dwóch plików!
rsmoorthy

34

Łańcuch PDF Zainstaluj łańcuch PDF

Bardzo dobrym rozwiązaniem jest PDFChain. Jest to interfejs użytkownika PDFTK, w którym można łączyć, dzielić, a nawet dodawać tła do plików PDF.


To najlepsza odpowiedź. Działa idealnie, niezależnie od wersji Ubuntu.
Paulo Coghi

Pracowałem na Ubuntu 14.04 bez problemów!
my account_ram

Działa świetnie na Ubuntu 18.04!
orschiro


@ user2413 to sklep z przekąskami, a nie jedyne źródło oprogramowania w Ubuntu. Próba wyszukiwania aptnie przyniosła jednak żadnych rezultatów: /
jena


8

Alternatywnym podejściem jest użycie lateksu, jak wyjaśniono w tym poście ( bez dostępu do konta root przy założeniu, że masz zainstalowany pdflatex ): https://tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by- lateks

Jest to przydatne w przypadku, gdy nie masz wspomnianych narzędzi ani uprawnień roota, ale masz pdflatex.

Kopiuję poniższy kod tex, aby scalić file1.pdfi file2.pdf. Utwórz plik o nazwie output.texi umieść:

\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{file1}
\includepdf[pages=-]{file2}
\end{document}

Aby skompilować, po prostu użyj: pdflatex output.tex

Scalony plik zostanie nazwany jako output.pdf.


6

Korzystam z pdfseparate, aby wyodrębnić określone strony z dużego pliku pdf:

pdfseparate -f  156 -l 157 input.pdf  output_%d.pdf 
pdfseparate -f  1   -l 2   input.pdf  output_%d.pdf 

a potem dołączam do nich wszystkich za pomocą polecenia:

pdfunite $(ls -v output_*.pdf | tr '\n' ' ') out$(date  +%Y-%m-%d_%H_%M_%S ).pdf

To łączy:

output_1.pdf output_2.pdf output_156.pdf output_157.pdf  

w:

out2014-12-14_23_25_36.pdf

Być może istnieje łatwiejszy sposób radzenia sobie ... :-)


Podstawienie procesu jest zbędne, a nawet potencjalnie szkodliwe . Poprawnym, znacznie prostszym wierszem poleceń jest pdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdfbrak kolejności ls -v. Oczywistą i trywialną poprawką jest nazywanie plików tak, aby były naturalnie sortowane w kolejności, w której chcesz je uwzględnić. Jeśli absolutnie chcesz ls -v, możesz przynajmniej zgubić fajkę tr, co tutaj nic nie da.
tripleee




1

Oto moje podejście:

  • Chciałem, aby był łatwo dostępny, dlatego utworzyłem skrót do kliknięcia prawym przyciskiem myszy w Nautilusie (patrz https://help.ubuntu.com/community/NautilusScriptsHowto )
  • Chciałem, żeby to było bardzo szybkie, więc użyłem pdfunite
  • pdfunite akceptuje ścieżki plików tylko w środku polecenia, więc musiałem podrapać się po głowie, aby zarządzać spacjami w ścieżkach plików. Przyjąłem więc założenie, że wszystkie ścieżki plików zaczynają się od „/ home /” i kończą na „.pdf”

Oto wynik:

#!/bin/sh
CLEANED_FILE_PATHS=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's,.pdf /home/,.pdf\\n/home/,g')
echo $CLEANED_FILE_PATHS | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" merged.pdf'

Juste wklej ten skrypt

/home/twoja_nazwa_użytkownika/.local/share/nautilus/scripts

i nazwij go „merge_pdfs.sh” (na przykład). Następnie ustaw go jako wykonywalny (kliknij prawym przyciskiem myszy plik merge_pdfs.sh -> karta Uprawnienia -> zaznacz „Zezwalaj na uruchamianie pliku jako programu”

Teraz, aby scalić pliki pdf, musisz je tylko wybrać -> kliknij prawym przyciskiem myszy -> skrypty -> merge_pdfs.sh i utworzy plik „scaled.pdf” w tym samym katalogu

Mam nadzieję, że to pomoże!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.