Unisci / converti più file PDF in un unico PDF

Come posso unire / convertire più file PDF in un unico file PDF di grandi dimensioni?

Ho provato quanto segue, ma il contenuto del file di destinazione non era come previsto:

convert file1.pdf file2.pdf merged.pdf 

Ho bisogno di una soluzione a riga di comando (CLI) molto semplice / di base. La cosa migliore sarebbe se potessi canalizzare l’output dell’unione / conversione direttamente in pdf2ps (come originariamente tentato nella mia domanda precedente qui: pipe Linux (convert -> pdf2ps -> lp) ).

Considerando che pdfunite fa parte di poppler ha una maggiore possibilità di essere installato, l’utilizzo è anche più semplice di pdftk :

 pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf 

Prova il buon ghostscript:

 gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf 

o anche in questo modo per una versione migliorata per PDF a bassa risoluzione (grazie ad Adriano per averlo indicato):

 gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf 

In entrambi i casi la risoluzione di uscita è molto più alta e migliore di quella con convertito:

 convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf 

In questo modo non avresti bisogno di installare altro, basta lavorare con quello che hai già installato nel tuo sistema (almeno entrambi vengono di default nel mio rhel).

Spero che questo ti aiuti,

AGGIORNAMENTO: prima di tutto grazie per tutti i vostri bei commenti !! solo un suggerimento che potrebbe funzionare per voi ragazzi, dopo aver fatto ricerche su Google, ho trovato un trucco superbo per ridurre le dimensioni dei PDF, ho ridotto con esso un PDF di 300 MB a soli 15 MB con una risoluzione accettabile! e tutto questo con il buon ghostscript, eccolo qui:

 gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf 

Saluti!!

Mi dispiace, sono riuscito a trovare la risposta io stesso usando google e un po ‘di fortuna:)

Per chi è interessato;

Ho installato il pdftk (pdf toolkit) sul nostro server debian e utilizzando il seguente comando ho ottenuto l’output desiderato:

 pdftk file1.pdf file2.pdf cat output output.pdf 

O

 gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ... 

Questo a sua volta può essere convogliato direttamente in pdf2ps.

Anche pdfjoin a.pdf b.pdf creerà un nuovo b-joined.pdf con i contenuti di a.pdf e b.pdf

Puoi usare direttamente il comando convert,

per esempio

 convert sub1.pdf sub2.pdf sub3.pdf merged.pdf 

Apache PDFBox http://pdfbox.apache.org/

PDFMerger Questa applicazione prenderà un elenco di documenti pdf e li unirà, salvando il risultato in un nuovo documento.

utilizzo: java-jar pdfbox-app-xyzjar PDFMerger “File PDF di origine (2 ..n)” “File PDF di destinazione”

Se si desidera convertire tutte le immagini scaricate in un unico file, quindi eseguire

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

Utilizzare gli strumenti PDF da python https://pypi.python.org/pypi/pdftools/1.0.6

Scarica il file tar.gz e decomprimilo ed esegui il comando come di seguito

 python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3 

Dovresti installare pyhton3 prima di eseguire il comando precedente

Questi strumenti supportano il seguito

  • Inserisci
  • inserire
  • Rimuovere
  • Ruotare
  • Diviso
  • fondersi
  • Cerniera lampo

Puoi trovare maggiori dettagli nel link sottostante ed è open source

https://github.com/MrLeeh/pdftools

Puoi usare sejda-console , gratis e open source. Decomprimilo ed esegui sejda-console merge -f file1.pdf file2.pdf -o merged.pdf

Conserva i segnalibri, collega le annotazioni, gli acroformi ecc. In realtà ha un sacco di opzioni con cui puoi giocare, basta eseguire sejda-console merge -h per vederli tutti.

I secondo la raccomandazione pdfunite . Stavo comunque ricevendo gli errori Argument list too long perché stavo tentando di unire> 2k file PDF.

Ho girato su Python per questo e due pacchetti esterni: PyPDF2 (per gestire tutto ciò che è relativo al PDF) e natsort (per fare un ordinamento “naturale” dei nomi dei file della directory). Nel caso in cui questo può aiutare qualcuno:

 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) 

Ecco un metodo che utilizzo che funziona ed è facile da implementare. Ciò richiederà sia le librerie fpdf che fpdi che possono essere scaricate qui:

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

Sono prevenuto essere uno degli sviluppatori di PyMuPDF (un binding Python di MuPDF).

Puoi facilmente fare ciò che vuoi con esso (e molto altro). Il codice Skeleton funziona così:

 #------------------------------------------------- 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") #------------------------------------------------- 

Questo è tutto. Sono disponibili diverse opzioni per selezionare solo gli intervalli di pagine, mantenere un indice comune, invertire la sequenza di pagine o cambiare la rotazione della pagina, ecc. Ecc.

Siamo su PyPi.

Mi piace l’idea di Chasmo, ma preferisco usare i vantaggi di cose come

 convert $(ls *.pdf) ../merged.pdf 

Fornire più file di origine per convert lead per unirli in un pdf comune. Questo comando unisce tutti i file con estensione .pdf nella directory effettiva in merged.pdf nella directory principale.

pdfunite va bene per unire interi PDF. Se si desidera, ad esempio, pagine 2-7 da file1.pdf e pagine 1,3,4 da file2.pdf, è necessario utilizzare pdfseparate per dividere i file in PDF separati per ogni pagina da fornire a pdfunite .

A quel punto probabilmente vorrai un programma con più opzioni. qpdf è la migliore utilità che ho trovato per manipolare i PDF. pdftk è più grande e più lento e Red Hat / Fedora non lo impacchettano a causa della sua dipendenza da gcj. Altre utilità PDF hanno dipendenze mono o Python. Ho trovato che qpdf prodotto un file di output molto più piccolo rispetto all’uso di pdfseparate e pdfunite per assemblare le pagine in un PDF di 30 pagine in uscita, 970kB rispetto a 1,6450 kB. Poiché offre molte più opzioni, la riga di comando di qpdf non è così semplice; la richiesta originale di unire file1 e file2 può essere eseguita con

 qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf 

Le altre risposte sono buone, ma se non riesci a unire i PDF localmente, se sei in un ambiente di hosting condiviso o per altri motivi, non ti aiuteranno.

Se stai cercando un’API per unire i PDF in remoto, puoi provare api2pdf che ha un endpoint per unire i PDF insieme. La documentazione è qui .