Scalanie / Konwertuj wiele plików PDF w jeden plik PDF

Jak mogę scalić / konwertować wiele plików PDF w jeden duży plik PDF?

Próbowałem następujących, ale zawartość pliku docelowego nie była taka, jak oczekiwano:

convert file1.pdf file2.pdf merged.pdf

Potrzebuję bardzo prostego / podstawowego rozwiązania wiersza poleceń (CLI). Najlepiej byłoby, gdybym mógł przekierować wyjście merge / convert prosto do pdf2ps (jak pierwotnie próbowano w moim wcześniej zadanym pytaniu tutaj: Linux piping (convert -> pdf2ps -> lp) ).

Author: Community, 2010-03-24

16 answers

Biorąc pod uwagę, że pdfunite jest częścią popplera, ma większą szansę na zainstalowanie, użycie jest również prostsze niż pdftk:

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
 1052
Author: Hubert Kario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-01 07:11:53

Spróbuj dobrego ghostscriptu:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf

Lub nawet w ten sposób dla ulepszonej wersji dla plików PDF o niskiej rozdzielczości (dzięki Adriano za zwrócenie na to Uwagi):

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf

W obu przypadkach rozdzielczość ouput jest znacznie wyższa i lepsza niż w ten sposób za pomocą konwertera:

convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf

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 w moim rhel).

Hope this pomaga,

UPDATE: przede wszystkim dzięki za wszystkie miłe komentarze!! wystarczy wskazówka, która może działać dla Was, po googling, znalazłem świetny trik, aby zmniejszyć rozmiar plików PDF, zmniejszyłem z nim jeden plik PDF z 300 MB do zaledwie 15 MB z akceptowalną rozdzielczością! a to wszystko z dobrym ghostscriptem, oto jest:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf
Zdrówko!!
 421
Author: Gery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-04 13:50:04

Przepraszam, sama udało mi się znaleźć odpowiedź za pomocą google i trochę szczęścia:)

Dla zainteresowanych;

Zainstalowałem pdftk (PDF toolkit) na naszym serwerze debian i za pomocą następującego polecenia osiągnąłem pożądany wynik:

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

Lub

gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...

To z kolei może być przesyłane bezpośrednio do pdf2ps.

 404
Author: alcohol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 07:51:20

Również pdfjoin a.pdf b.pdf utworzy Nowy b-joined.pdf z zawartością a. pdf i b. pdf

 39
Author: rodrigob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-18 17:24:32

Możesz użyć polecenia convert bezpośrednio,

Np.

convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
 33
Author: Noor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-17 11:33:39

Apache PDFBox http://pdfbox.apache.org/

PDFMerger Ta aplikacja pobierze listę dokumentów pdf i połączy je, zapisując wynik w nowym dokumencie.

Użycie: java-jar pdfbox-app-x.y.z.jar PDFMerger " źródłowe pliki PDF (2 ..n)" "docelowy plik PDF"

 11
Author: lumpchen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 05:52:33

Użyj narzędzi PDF z Pythona https://pypi.python.org/pypi/pdftools/1.0.6

Pobierz tar.plik gz i rozpakuj go i uruchom polecenie jak poniżej

python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3 

Powinieneś zainstalować pyhton3 przed uruchomieniem powyższego polecenia

Te narzędzia obsługują poniższe

  • dodaj
  • insert
  • Usuń
  • Rotate
  • Split
  • Merge
  • Zip

Możesz znaleźć więcej szczegółów w poniższym linku i jest otwarty źródło

Https://github.com/MrLeeh/pdftools

 9
Author: Ravikiran Reddy Kotapati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 10:34:56

Jeśli chcesz przekonwertować wszystkie pobrane obrazy na jeden plik pdf, wykonaj

convert img{0..19}.jpg slides.pdf

 8
Author: Trupti Kini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-13 12:00:19

Możesz używać sejda-console , wolnego i otwartego oprogramowania. Rozpakuj i uruchom sejda-console merge -f file1.pdf file2.pdf -o merged.pdf

Zachowuje zakładki, adnotacje linków, akroformy itp.. w rzeczywistości ma sporo opcji, którymi możesz się bawić, po prostu uruchom sejda-console merge -h, aby zobaczyć je wszystkie.

 7
Author: Andrea Vacondio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 18:44:13

Popieram zalecenie. Otrzymywałem jednak błędy Argument list too long, gdy próbowałem połączyć > 2K plików PDF.

Zwróciłem się w tym celu do Pythona i dwóch zewnętrznych pakietów: PyPDF2 (do obsługi wszystkich rzeczy związanych z plikami PDF) i natsort (do "naturalnego" rodzaju nazw plików katalogu). W przypadku, gdy może to komuś pomóc:

from PyPDF2 import PdfFileMerger
import natsort
import os

DIR = "dir-with-pdfs/"
OUTPUT = "output.pdf"

file_list = filter(lambda f: f.endswith('.pdf'), os.listdir(DIR))
file_list = natsort.natsorted(file_list)

# 'strict' used because of
# https://github.com/mstamy2/PyPDF2/issues/244#issuecomment-206952235
merger = PdfFileMerger(strict=False)

for f_name in file_list:
  f = open(os.path.join(DIR, f_name), "rb")
  merger.append(f)

output = open(OUTPUT, "wb")
merger.write(output)
 5
Author: Greg Sadetsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-13 18:03:00

Oto metoda, której używam, która działa i jest łatwa do wdrożenia. Wymaga to zarówno fpdf i fpdi bibliotek, które można pobrać tutaj:

require('fpdf.php');
require('fpdi.php');

$files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'];

$pdf = new FPDI();

foreach ($files as $file) {
    $pdf->setSourceFile($file);
    $tpl = $pdf->importPage(1, '/MediaBox');
    $pdf->addPage();
    $pdf->useTemplate($tpl);
}

$pdf->Output('F','merged.pdf');
 4
Author: billynoah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-27 16:03:48

Jestem stronniczy będąc jednym z twórców PyMuPDF (wiązania Pythona MuPDF).

Można łatwo zrobić, co chcesz z nim (i wiele więcej). Kod szkieletu działa tak:

#-------------------------------------------------
import fitz         # the binding PyMuPDF
fout = fitz.open()  # new PDF for joined output
flist = ["1.pdf", "2.pdf", ...]  # list of filenames to be joined

for f in flist:
    fin = fitz.open(f)  # open an input file
    fout.insertPDF(fin) # append f
    fin.close()

fout.save("joined.pdf")
#-------------------------------------------------
To wszystko. Dostępnych jest kilka opcji wyboru tylko zakresów stron, utrzymywania wspólnego spisu treści, odwracania kolejności stron lub zmiany rotacji stron itp., itd. Jesteśmy na PyPi.
 4
Author: Jorj McKie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-15 21:22:54

Podoba mi się pomysł Chasmo, ale wolę korzystać z zalet takich rzeczy jak

convert $(ls *.pdf) ../merged.pdf

Podanie wielu plików źródłowych do convert prowadzi do połączenia ich w wspólny plik pdf. Polecenie to łączy wszystkie pliki z rozszerzeniem .pdfw katalogu rzeczywistym do merged.pdf w katalogu nadrzędnym.

 3
Author: user3709983,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 08:34:05

pdfunite można łączyć całe pliki PDF. Jeśli chcesz, na przykład, strony 2-7 z pliku1.pdf oraz strony 1,3,4 z pliku2.pdf, musisz użyć pdfseparate, aby podzielić pliki na osobne pliki PDF dla każdej strony, aby dać do pdfunite.

W tym momencie prawdopodobnie potrzebujesz programu z większą ilością 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 ze względu na zależność od gcj. Inne narzędzia PDF mają Mono lub Python zależności. Znalazłem qpdf produkował znacznie mniejszy plik wyjściowy niż przy użyciu pdfseparate i pdfunite do złożenia stron w 30-stronicowy wyjściowy PDF, 970kb vs. 1,6450 kB. Ponieważ oferuje o wiele więcej opcji, Wiersz poleceń qpdf nie jest tak prosty; pierwotne żądanie połączenia plik1 i plik2 może być wykonane za pomocą

qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
 2
Author: skierpage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 10:46:14

Inne odpowiedzi są dobre, ale jeśli nie możesz scalić plików PDF lokalnie, niezależnie od tego, czy jesteś w środowisku współdzielonego hostingu, czy z innych powodów, nie pomogą Ci.

Jeśli szukasz API do zdalnego scalania plików PDF, możesz spróbować api2pdf, który ma punkt końcowy do scalania plików PDF razem. Dokumentacja jest TUTAJ .

 0
Author: apexdodge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-22 13:55:57

Po przeszukaniu wielu dostępnych bibliotek pdf, jedyną rzeczą, która działała dla mnie idealnie, jest

Https://libraries.io/npm/easy-pdf-merge

Wymaga zainstalowania Javy w wersji 6 lub nowszej, ale działa idealnie. Pdftk jest pełen błędów.

var merge = require('easy-pdf-merge');

merge(source_files,dest_file_path,function(err){

        if(err)
        return console.log(err);

        console.log('Success');

});

Uwaga: to nie jest cmd, ale można go uruchomić za pomocą poleceń, takich jak przyjmowanie nazw plików jako argumentów linii poleceń.

 0
Author: Krishnadas PC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 13:15:33