recortar - unir paginas pdf linux
Combinar/convertir varios archivos PDF en un PDF (16)
Apache PDFBox http://pdfbox.apache.org/
PDFMerger Esta aplicación tomará una lista de documentos PDF y los combinará, guardando el resultado en un nuevo documento.
uso: java -jar pdfbox-app-xyzjar PDFMerger "Archivos PDF de origen (2 ..n)" "Archivo PDF de destino"
¿Cómo podría fusionar / convertir varios archivos PDF en un archivo PDF grande?
Intenté lo siguiente, pero el contenido del archivo de destino no fue el esperado:
convert file1.pdf file2.pdf merged.pdf
Necesito una solución de línea de comandos (CLI) muy simple / básica. Lo mejor sería si pudiera canalizar la salida de la combinación / conversión directamente a pdf2ps
(como se intentó originalmente en mi pregunta anterior aquí: tubería de Linux (convertir -> pdf2ps -> lp) ).
Aquí hay un método que utilizo 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'');
Después de buscar en muchas de las bibliotecas pdf disponibles, lo único que funcionó perfectamente para mí es
https://libraries.io/npm/easy-pdf-merge
Requiere la instalación de Java 6 o superior, pero funciona perfectamente. Pdftk está lleno de errores.
var merge = require(''easy-pdf-merge'');
merge(source_files,dest_file_path,function(err){
if(err)
return console.log(err);
console.log(''Success'');
});
Nota : Esto no es cmd pero puede ejecutarse con comandos como aceptar nombres de archivos como argumentos de línea de comandos.
Estoy parcializado por ser uno de los desarrolladores de PyMuPDF (un enlace Python de MuPDF).
Puedes hacer fácilmente lo que quieras con él (y mucho más). El código del 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 páginas o cambiar la rotación de la página, etc., etc.
Estamos en PyPi.
Las otras respuestas son buenas, pero si no puede combinar archivos PDF localmente, ya sea que esté en un entorno de alojamiento compartido, o por otras razones, no le ayudarán.
Si está buscando una API para combinar archivos PDF de forma remota, puede probar api2pdf, que tiene un punto final para combinar archivos PDF. La documentación está here .
Lo siento, me las arreglé para encontrar la respuesta yo mismo usando google y un poco de suerte:)
Para los 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 se puede canalizar directamente en pdf2ps.
Me gusta la idea de Chasmo, pero prefiero usar las ventajas de cosas como
convert $(ls *.pdf) ../merged.pdf
Dar varios archivos de origen para convert
clientes potenciales para fusionarlos en un pdf común. Este comando combina todos los archivos con la extensión .pdf
en el directorio real en merged.pdf
en el directorio principal.
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 archivos PDF de baja resolución (gracias a Adriano por señalarlo):
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 más alta y mejor que de esta manera utilizando convert:
convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf
De esta manera, no necesitaría instalar nada más, solo trabaje con lo que ya tiene instalado en su sistema (al menos ambos vienen por defecto 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 buscar en Google, encontré un truco excelente para reducir el tamaño de los archivos PDF. ¡Reduje un archivo 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!!
Puedes usar sejda-console , libre y de código abierto. Descomprímalo y ejecute sejda-console merge -f file1.pdf file2.pdf -o merged.pdf
Conserva marcadores, anotaciones de enlaces, acroformas, etc. En realidad, tiene muchas opciones con las que puedes jugar, simplemente ejecuta sejda-console merge -h
para verlas todas.
Puedes usar el comando de conversión directamente,
p.ej
convert sub1.pdf sub2.pdf sub3.pdf merged.pdf
Segundo la recomendación de pdfunite
. Sin embargo, estaba obteniendo errores en la Argument list too long
, ya que estaba intentando fusionar> 2k archivos PDF.
Me dirigí a Python para obtener este 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)
Si desea convertir todas las imágenes descargadas en un pdf, ejecute
convert img{0..19}.jpg slides.pdf
También pdfjoin a.pdf b.pdf
creará un nuevo b-joined.pdf
con los contenidos de a.pdf y b.pdf
Teniendo en cuenta que pdfunite
es parte de poppler, tiene una mayor probabilidad de ser instalado, el uso también es más sencillo que pdftk
:
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
Utilice las herramientas de PDF de python https://pypi.python.org/pypi/pdftools/1.0.6
Descargue el archivo tar.gz, 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 soportan las siguientes
- añadir
- insertar
- retirar
- Girar
- División
- Unir
- Cremallera
Puede encontrar más detalles en el siguiente enlace y es de código abierto.
pdfunite
está bien para combinar archivos PDF completos. Si desea, por ejemplo, las páginas 2 a 7 de file1.pdf y las páginas 1,3,4 de file2.pdf, debe usar pdfseparate
para dividir los archivos en archivos PDF separados para cada página para entregar a pdfunite
.
En ese momento, es probable que desee un programa 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é que qpdf
produjo un archivo de salida mucho más pequeño que el uso de pdfseparate
y pdfunite
para ensamblar páginas en un PDF de salida de 30 páginas, 970kB vs. 1,6450 kB. Debido a que ofrece muchas más opciones, la línea de comandos de qpdf
no es tan simple; La solicitud original para fusionar archivo1 y archivo2 se puede realizar con
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf