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) ).
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
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!!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.
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
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
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"
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
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
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.
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)
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');
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.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 .pdf
w katalogu rzeczywistym do merged.pdf
w katalogu nadrzędnym.
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
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 .
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ń.
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