Comment fusionner/convertir plusieurs fichiers PDF en un seul grand fichier PDF?
J'ai essayé ce qui suit, mais le contenu du fichier cible n'était pas comme prévu:
convert file1.pdf file2.pdf merged.pdf
J'ai besoin d'une solution de ligne de commande (CLI) très simple/basique. Le mieux serait que je puisse diriger directement la sortie de la fusion/conversion vers pdf2ps
(comme tenté à l'origine dans la question que je vous ai précédemment posée: tuyauterie Linux (conversion -> pdf2ps -> lp) ).
Je suis désolé, j'ai réussi à trouver la réponse moi-même en utilisant Google et un peu de chance:)
Pour ceux intéressés
J'ai installé pdftk (pdf toolkit) sur notre serveur Debian et, à l'aide de la commande suivante, j'ai obtenu le résultat souhaité:
pdftk file1.pdf file2.pdf cat output output.pdf
OR
gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...
Cela peut être directement transféré dans pdf2ps.
Étant donné que pdfunite
fait partie de poppler, il a plus de chances d’être installé. Son utilisation est également plus simple que pdftk
:
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
Essayez le bon ghostscript:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf
ou même de cette manière pour une version améliorée des PDF basse résolution (merci à Adriano de l'avoir signalé):
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf
Dans les deux cas, la résolution de sortie est beaucoup plus élevée et meilleure que cette méthode en utilisant convert:
convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf
De cette façon, vous n’aurez plus besoin d’installer quoi que ce soit, mais utilisez ce que vous avez déjà installé sur votre système (au moins les deux sont fournis par défaut dans mon rhel).
J'espère que cela t'aides,
PDATE: Merci tout d'abord pour vos gentils commentaires !! juste un conseil qui pourrait fonctionner pour vous, après avoir cherché sur Google, j’ai trouvé un truc superbe pour réduire la taille des PDF, j’ai réduit avec elle un PDF de 300 Mo à seulement 15 Mo avec une résolution acceptable! et tout cela avec le bon ghostscript, le voici:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf
à votre santé!!
De plus, pdfjoin a.pdf b.pdf
créera un nouveau b-joined.pdf
avec le contenu de a.pdf et b.pdf.
Vous pouvez utiliser la commande convert directement,
par exemple.
convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
C'est la solution la plus simple si vous avez plusieurs fichiers et que vous ne voulez pas taper les noms un par un:
qpdf --empty --pages *.pdf -- out.pdf
pdfunite
convient pour fusionner des PDF entiers. Si vous voulez, par exemple, les pages 2 à 7 de fichier1.pdf et les pages 1, 3, 4 de fichier2.pdf, vous devez utiliser pdfseparate
pour scinder les fichiers en fichiers PDF séparés pour chaque page à donner à pdfunite
.
À ce stade, vous voulez probablement un programme avec plus d'options. qpdf
est le meilleur utilitaire que j'ai trouvé pour manipuler des PDF. pdftk
est plus gros et plus lent et Red Hat/Fedora ne le compresse pas en raison de sa dépendance à gcj. Les autres utilitaires PDF ont des dépendances Mono ou Python. J'ai trouvé que qpdf
produisait un fichier de sortie beaucoup plus petit que pdfseparate
et pdfunite
pour assembler des pages dans un fichier PDF de 30 pages, 970 Ko contre 1,6450 Ko. Puisqu'elle offre beaucoup plus d'options, la ligne de commande de qpdf
n'est pas aussi simple; la demande initiale de fusion de fichier1 et fichier2 peut être effectuée avec
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
Apache PDFBox http://pdfbox.Apache.org/
PDFMerger Cette application prend une liste de documents pdf et les fusionne, en enregistrant le résultat dans un nouveau document.
utilisation: Java -jar pdfbox-app-x.y.z.jar PDFMerger "fichiers source PDF (2 ..n)" "fichier cible PDF"
Utilisez PDF outils de python https://pypi.python.org/pypi/pdftools/1.0.6
Téléchargez le fichier tar.gz, décompressez-le et exécutez la commande comme ci-dessous
python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3
Vous devez installer pyhton3 avant d’exécuter la commande ci-dessus.
Ces outils supportent le dessous
Vous pouvez trouver plus de détails dans le lien ci-dessous et c'est open source
Si vous voulez convertir toutes les images téléchargées en un pdf, exécutez-le.
convert img{0..19}.jpg slides.pdf
Vous pouvez utiliser sejda-console , source libre et open source. Décompressez-le et lancez sejda-console merge -f file1.pdf file2.pdf -o merged.pdf
Il préserve les signets, les annotations de liens, les acroformes, etc. Il a en fait beaucoup d'options avec lesquelles vous pouvez jouer, il suffit de lancer sejda-console merge -h
pour les voir tous.
J'appuie la recommandation pdfunite
. J'avais cependant des erreurs Argument list too long
alors que je tentais de fusionner des fichiers> 2k PDF.
Je me suis tourné vers Python pour cela et deux packages externes: PyPDF2 (pour gérer tout ce que PDF est lié) et natsort (to faire une sorte "naturelle" des noms de fichiers du répertoire). Si cela peut aider quelqu'un:
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)
Voici une méthode que j'utilise qui fonctionne et est facile à mettre en œuvre. Cela nécessitera à la fois les bibliothèques fpdf et fpdi qui peuvent être téléchargées ici. :
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');
Je suis partial étant l'un des développeurs de PyMuPDF (une Python liaison de MuPDF).
Vous pouvez facilement en faire ce que vous voulez (et bien plus encore). Le code squelette fonctionne comme ceci:
#-------------------------------------------------
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")
#-------------------------------------------------
C'est à peu près ça. Plusieurs options sont disponibles pour sélectionner uniquement les plages de pages, maintenir une table des matières commune, inverser la séquence des pages, modifier la rotation des pages, etc., etc.
Nous sommes sur PyPi.
J'aime l'idée de Chasmo, mais je préfère utiliser les avantages de choses comme
convert $(ls *.pdf) ../merged.pdf
Donner plusieurs fichiers sources à convert
conduit à les fusionner en un pdf commun. Cette commande fusionne tous les fichiers avec .pdf
extension dans le répertoire actuel dans merged.pdf
dans le répertoire parent.
Les autres réponses sont bonnes, mais si vous ne pouvez pas fusionner des fichiers PDF localement, que vous soyez dans un environnement d'hébergement partagé ou pour d'autres raisons, ils ne vous aideront pas.
Si vous recherchez une API permettant de fusionner des fichiers PDF à distance, vous pouvez essayer api2pdf qui possède un point de terminaison pour la fusion de fichiers PDF. La documentation est ici .