Fusiona / convierte múltiples archivos PDF en un PDF

¿Cómo podría fusionar / convertir varios archivos PDF en un gran archivo PDF?

Intenté lo siguiente, pero el contenido del archivo de destino no era el esperado:

convert file1.pdf file2.pdf merged.pdf 

Necesito una solución de línea de comandos muy simple / básica (CLI). Lo mejor sería si pudiera canalizar la salida de la fusión / conversión directamente a pdf2ps (como originalmente se intentó en mi pregunta previa aquí: tuberías de Linux (convertir -> pdf2ps -> lp) ).

Teniendo en cuenta que pdfunite es parte de poppler, tiene una mayor posibilidad de ser instalado, el uso también es más simple que pdftk :

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

Prueba el buen ghostscript:

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

o incluso de esta manera para una versión mejorada para PDF de baja resolución (gracias a Adriano por señalar esto):

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

En ambos casos, la resolución de salida es mucho mayor y mejor que con la conversión de esta manera:

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

De esta manera, no necesitaría instalar nada más, simplemente trabaje con lo que ya tiene instalado en su sistema (al menos ambos vienen de manera predeterminada en mi rhel).

Espero que esto ayude,

ACTUALIZACIÓN: en primer lugar, ¡gracias por todos sus buenos comentarios! solo un consejo que puede funcionar para ustedes, después de googlear, encontré un truco excelente para reducir el tamaño de los PDF, reduje con él un PDF de 300 MB a solo 15 MB con una resolución aceptable. y todo esto con el buen ghostscript, aquí está:

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

¡¡aclamaciones!!

Lo siento, logré encontrar la respuesta usando Google y un poco de suerte:)

Para aquellos interesados;

Instalé el pdftk (pdf toolkit) en nuestro servidor Debian, y con el siguiente comando logré el resultado deseado:

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

Esto a su vez puede canalizarse directamente a pdf2ps.

También pdfjoin a.pdf b.pdf creará un nuevo b-joined.pdf con los contenidos de a.pdf y b.pdf

Puede usar el comando convertir directamente,

p.ej

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

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

PDFMerger Esta aplicación tomará una lista de documentos en PDF y los fusionará, guardando el resultado en un documento nuevo.

uso: java -jar pdfbox-app-xyzjar PDFMerger “Archivos PDF de origen (2 ..n)” “Archivo PDF de destino”

Si desea convertir todas las imágenes descargadas en un solo archivo PDF, ejecute

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

Use las herramientas en PDF de python https://pypi.python.org/pypi/pdftools/1.0.6

Descargue el archivo tar.gz y descomprímalo y ejecute el comando como se muestra a continuación

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

Debe instalar pyhton3 antes de ejecutar el comando anterior

Estas herramientas son compatibles con la siguiente

  • añadir
  • insertar
  • retirar
  • Girar
  • División
  • Unir
  • Cremallera

Puede encontrar más detalles en el siguiente enlace y es de código abierto

https://github.com/MrLeeh/pdftools

Puede usar la consola sejda , fuente libre y abierta. Descomprímala y ejecute sejda-console merge -f file1.pdf file2.pdf -o merged.pdf

Conserva marcadores, anotaciones de enlaces, acroforms, etc. En realidad tiene muchas opciones con las que puedes jugar, solo ejecuta sejda-console merge -h para verlas todas.

Estoy en segundo lugar la recomendación pdfunite . Sin embargo, recibí errores Argument list too long porque estaba intentando fusionar> 2k archivos PDF.

Me volví a Python para esto y dos paquetes externos: PyPDF2 (para manejar todo lo relacionado con PDF) y natsort (para hacer un tipo “natural” de los nombres de archivo del directorio). En caso de que esto pueda ayudar a alguien:

 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) 

Aquí hay un método que uso que funciona y es fácil de implementar. Esto requerirá las bibliotecas fpdf y fpdi que se pueden descargar aquí:

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

Estoy predispuesto a ser uno de los desarrolladores de PyMuPDF (un enlace de Python de MuPDF).

Puedes hacer fácilmente lo que quieras con él (y mucho más). El código de esqueleto funciona así:

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

Eso es todo. Hay varias opciones disponibles para seleccionar solo rangos de páginas, mantener una tabla de contenidos conjunta, invertir la secuencia de la página o cambiar la rotación de la página, etc., etc.

Estamos en PyPi.

Me gusta la idea de Chasmo, pero prefiero usar las ventajas de cosas como

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

Dar múltiples archivos fuente para convert lleva a fusionarlos en un pdf común. Este comando combina todos los archivos con extensión .pdf en el directorio real en merged.pdf en el directorio padre.

pdfunite está bien para combinar PDF completos. Si quiere, por ejemplo, las páginas 2-7 de file1.pdf y las páginas 1,3,4 de file2.pdf, tiene que usar pdfseparate para dividir los archivos en PDF separados para cada página para dar a pdfunite .

En ese momento, es probable que desee un progtwig con más opciones. qpdf es la mejor utilidad que he encontrado para manipular archivos PDF. pdftk es más grande y más lento y Red Hat / Fedora no lo empaqueta debido a su dependencia de gcj. Otras utilidades de PDF tienen dependencias Mono o Python. Encontré qpdf produjo un archivo de salida mucho más pequeño que usar pdfseparate y pdfunite para ensamblar páginas en un PDF de salida de 30 páginas, 970kB contra 1,6450 kB. Debido a que ofrece muchas más opciones, la línea de comando de qpdf no es tan simple; la solicitud original para combinar archivo1 y archivo2 se puede realizar con

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

Las otras respuestas son buenas, pero si no puede fusionar archivos PDF localmente, ya sea que se encuentre en un entorno de alojamiento compartido o por otros motivos, no lo ayudarán.

Si está buscando una API para fusionar archivos PDF de forma remota, puede probar api2pdf, que tiene un punto final para combinar pdfs. La documentación está aquí .