Wenn Sie nur zwei PDF-Dateien verketten möchten, ohne den Inhalt erneut zu verarbeiten, pdftk
sind Sie hier richtig. (Unter Mac OS X sollte dies über MacPorts oder Fink verfügbar sein. Für Linux gibt es native Pakete für alle wichtigen Distributionen. Für Windows sehen Sie hier nach. ) Versuchen Sie Folgendes:
pdftk title.pdf content.pdf cat output book.pdf
Dies wird die prepend title.pdf zum content.pdf und das Ergebnis in schreiben book.pdf .
pdftk
ist eine "blöde", aber sehr schnelle Möglichkeit, zwei (oder mehr) PDF-Dateien zu verketten. "Dumm" insofern, als pdftk
es den PDF - Datenstrom in keiner Weise interpretiert , es nur dafür sorgt, dass die internen Objektnummern nach Bedarf neu gemischt werden und in der PDF - xref
Struktur (die im Grunde eine Art PDF ToC für PDF ist) erscheinen Objekte).
Ghostscript:
Wenn Sie Ghostscript verwenden möchten, lautet der grundlegende Befehl zum Verketten derselben zwei Dateien:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
Wie Sie jedoch festgestellt haben, kann diese einfache Befehlszeile Ihre Bildqualität beeinträchtigen. Der Grund dafür ist, dass Ghostscript bei der Verarbeitung von PDFs nicht "dump" ist: Es interpretiert sie beim Einlesen vollständig und erstellt beim Ausschreiben des Ergebnisses eine völlig neue Datei. Für die Erstellung des Ergebnisses werden automatisch die Standardeinstellungen für viele Details in der Gesamtverarbeitung verwendet. Diese Standardeinstellungen gelten für alle Fälle, in denen die Aufrufe Ghostscript nicht anders angewiesen hatten.
Die Methode von Ghostscript zum Erstellen des neuen Buches.pdf ist also viel "intelligenter" (aber auch viel langsamer) als die Methode von Ghostscript pdftk
. (Dies ist auch der Grund, warum Ghostscript in vielen Fällen in der Lage ist, b0rken PDF-Dateien in Grenzen zu "reparieren" oder Schriftarten in die Ausgabe-PDFs einzubetten, die nicht in Eingabe-PDFs eingebettet sind, oder doppelte Bilder zu entfernen und zu ersetzen sie durch bloße Verweise usw. - und insgesamt kleinere, besser optimierte Dateien aus aufgeblähten Eingabe-PDFs erstellt ...)
Die Lösung besteht darin, Ghostscript die Standardeinstellungen nicht zu überlassen: indem der Befehlszeile weitere benutzerdefinierte Parameter hinzugefügt werden.
Was bedeutet "Ghostscript 'interpretiert' seine PDF-Eingabe" ?
Alle Dateien und deren Inhalte (Objekte, Streams, Schriftarten, Bilder, ...) werden eingelesen, geprüft und in einer eigenen internen Darstellung gehalten, bevor die resultierende PDF-Datei mit ihren PDF-Objekten erneut ausgespuckt wird. Beim Ausspucken wendet Ghostscript jedoch alle internen Standardeinstellungen für die Hunderte von verfügbaren Parametern [*] an .
Leider führt dies zu einer "erneuten Verarbeitung" von Bildern gemäß diesen Standardeinstellungen - die nur durch Hinzufügen eigener (gewünschter) Befehlszeilenparameter vermieden oder überschrieben werden kann.
Ihre Bildprobleme können durch die Notwendigkeit von Ghostscript (aufgrund von Lizenzproblemen) verursacht werden, JPEG2000-Bilder in JPEG-Codierungen umzucodieren. Wenn Sie dies vermeiden möchten, fügen Sie Ihrer Befehlszeile Folgendes hinzu:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Weitere bildbezogene Befehlszeilenoptionen, die berücksichtigt werden sollten, sind:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Die vollständige Ghostscript-Befehlszeile, die Sie glücklich machen könnte, sollte also lauten:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
title.pdf \
content.pdf
Sie können Ghostscript auch anweisen, Bilder in der Ausgabe-PDF-Datei NICHT zu komprimieren , indem Sie die folgende Befehlszeile verwenden:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
.
[*]:
Wenn Sie sich über eine vollständige Liste der Standardeinstellungen informieren möchten , die das pdfwrite- Gerät von Ghostscript verwendet , führen Sie den folgenden Befehl aus. Es gibt Ihnen die vollständige Liste zurück:
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
Erläuterungen dazu, was genau diese Parameter bedeuten, finden Sie in der Adobe-Dokumentation zu "Distiller-Parameter" . Ghostscript ist sehr bemüht, all diese ...