Si vous souhaitez simplement concaténer deux fichiers PDF sans aucun retraitement de son contenu, pdftk
c'est pour vous. (Sur Mac OS X, cela devrait être disponible via MacPorts ou Fink, pour Linux, il existe des packages natifs pour toutes les principales distributions; pour Windows, regardez ici. ) Essayez ceci:
pdftk title.pdf content.pdf cat output book.pdf
Cela ajoutera le titre.pdf au contenu.pdf et enregistrera le résultat dans book.pdf .
pdftk
est un moyen "stupide" mais très rapide de concaténer deux (ou plus) fichiers PDF. « Dumb » dans la mesure où , comme pdftk
ne signifie en aucune façon d' interpréter le flux de données PDF, il est tout simplement en sorte que les numéros d'objet internes sont à nouveau rebattues au besoin et apparaissent dans le fichier PDF xref
structure (qui est essentiellement une sorte de PDF TdC pour objets).
Ghostscript:
Si vous souhaitez utiliser Ghostscript, la commande de base pour concaténer les deux mêmes fichiers serait:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
Cependant, comme vous l'avez constaté, cette simple ligne de commande peut gâcher la qualité de votre image. La raison en est que Ghostscript n'est pas un «vidage» lorsqu'il traite des PDF: il les interprète complètement lors de la lecture et crée un fichier complètement nouveau lors de l'écriture du résultat. Pour créer le résultat, il utilisera automatiquement les paramètres par défaut pour beaucoup de détails dans le traitement global. Ces valeurs par défaut s'appliqueront à tous les cas où ses invocations n'avaient pas indiqué à Ghostscript le contraire.
La méthode de Ghostscript pour créer le nouveau livre.pdf est donc beaucoup plus "intelligente" (mais aussi beaucoup plus lente) que pdftk
la méthode de. (C'est aussi la raison pour laquelle Ghostscript est dans de nombreux cas capable - dans certaines limites - de "réparer" les fichiers PDF b0rken, ou d'incorporer des polices dans les PDF de sortie qui ne sont pas incorporées dans les PDF d'entrée, ou de supprimer les images en double, en remplaçant les par de simples références, etc. - et créé globalement des fichiers plus petits et mieux optimisés à partir de fichiers PDF gonflés en entrée ...)
La solution est de ne pas laisser Ghostscript utiliser ses valeurs par défaut: en ajoutant plus de paramètres personnalisés à la ligne de commande.
Qu'est-ce que cela signifie "Ghostscript" interprète "son entrée PDF" ?
Tout le fichier et son contenu (objets, flux, polices, images, ...) sont lus, vérifiés et conservés dans sa propre représentation interne, avant de cracher à nouveau le PDF résultant avec ses objets PDF. Cependant, quand «crache», Ghostscript appliquera tous ses paramètres par défaut internes pour les centaines de paramètres [*] qui sont disponibles.
Malheureusement, cela provoque votre «retraitement» des images selon ces paramètres par défaut - qui ne peuvent être évités ou remplacés qu'en ajoutant vos propres paramètres de ligne de commande (souhaités).
Vos problèmes d'image pourraient être causés par le besoin de Ghostscript (en raison de problèmes de licence) de ré-encoder les images JPEG2000 en encodage JPEG. Si vous voulez éviter cela, ajoutez ce qui suit à votre ligne de commande:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Les autres options de ligne de commande liées à l'image à considérer pour l'inclusion sont:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Ainsi, la ligne de commande Ghostscript complète qui pourrait vous rendre heureux devrait se lire:
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
Vous pouvez également dire à Ghostscript de ne PAS compresser les images du tout dans le PDF de sortie, en utilisant cette ligne de commande:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
.
[*]:
Si vous souhaitez en savoir plus sur la liste complète des paramètres par défaut utilisés par le périphérique pdfwrite de Ghostscript , exécutez la commande suivante. Il vous renvoie la liste complète :
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
Pour obtenir des explications sur la signification exacte de tous ces paramètres, vous devrez lire dans la documentation Adobe sur les "Paramètres Distiller" . Ghostscript essaie très fort d'imiter tout cela ...