web-dev-qa-db-fra.com

Fusionner / convertir plusieurs PDF fichiers en un PDF

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) ).

948
alcohol

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.

468
alcohol

É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
1261
Hubert Kario

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é!!

471
Gery

De plus, pdfjoin a.pdf b.pdf créera un nouveau b-joined.pdf avec le contenu de a.pdf et b.pdf.

48
rodrigob

Vous pouvez utiliser la commande convert directement,

par exemple.

convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
36
Noor

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

33
SaTa

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
22
skierpage

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"

13
lumpchen

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

  • ajouter
  • insérer
  • Retirer
  • Tourner
  • Split
  • Fusionner
  • Zip *: français

Vous pouvez trouver plus de détails dans le lien ci-dessous et c'est open source

https://github.com/MrLeeh/pdftools

11

Si vous voulez convertir toutes les images téléchargées en un pdf, exécutez-le.

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

8
Trupti Kini

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.

8
Andrea Vacondio

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)
5
Greg Sadetsky

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');
4
billynoah

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.

4
Jorj McKie

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 .pdfextension dans le répertoire actuel dans merged.pdf dans le répertoire parent.

3
user3709983

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 .

0
apexdodge