q16 paginas not mas lote jpg imagenes im6 desde crear convertir convert authorized linux shell ubuntu

paginas - crear pdf imagenes linux



Fusiona mĂșltiples jpg en un solo pdf en Linux (6)

Así es como lo hago:
Primera línea convertir todos los archivos jpg a pdf está utilizando el comando convertir.
La segunda línea fusiona todos los archivos pdf a uno solo como pdf por página. Esto está usando gs ((PostScript e intérprete de lenguaje PDF y vista previa))

for i in $(find . -maxdepth 1 -name "*.jpg" -print); do convert $i ${i//jpg/pdf}; done gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=merged_file.pdf -dBATCH `find . -maxdepth 1 -name "*.pdf" -print"`

Utilicé el siguiente comando para convertir y fusionar todos los archivos jpg de un directorio en un solo archivo pdf.

convert *.jpg file.pdf

Los archivos en el directorio están numerados de 1.jpg a 123.jpg . La conversión fue bien, pero después de convertir las páginas se mezclaron todas. Quería que el pdf tuviera páginas de 1.jpg a 123.jpg en el mismo orden en que se nombran. Intenté con el siguiente comando también:

cd 1 FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2) mkdir temp && cd temp for file in $FILES; do BASE=$(echo $file | sed ''s/.jpg//g''); convert ../$BASE.jpg $BASE.pdf; done && pdftk *pdf cat output ../1.pdf && cd .. rm -rf temp

Pero todavía no hay suerte. Plataforma operativa Linux.


El problema se debe a que su shell está expandiendo el comodín en un orden puramente alfabético, y como las longitudes de los números son diferentes, el orden será incorrecto:

$ echo *.jpg 1.jpg 10.jpg 100.jpg 101.jpg 102.jpg ...

La solución es rellenar los nombres de los archivos con ceros según sea necesario para que tengan la misma longitud antes de ejecutar el comando de conversión:

$ for i in *.jpg; do num=`expr match "$i" ''/([0-9]/+/).*''`; > padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}"; done

Ahora los archivos se combinarán con el comodín en el orden correcto, listos para el comando de conversión:

$ echo *.jpg 001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg ...


Mezclando la primera idea con su respuesta, creo que este código puede ser satisfactorio

jpgs2pdf.sh #!/bin/bash cd $1 FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2) mkdir temp > /dev/null cd temp for file in $FILES; do BASE=$(echo $file | sed ''s/.jpg//g''); convert ../$BASE.jpg $BASE.pdf; done && pdftk `ls -v *pdf` cat output ../`basename $1`.pdf cd .. rm -rf temp


O simplemente lea el manual de ls y vea:

-v clase natural de números (versión) dentro del texto

Entonces, haciendo lo que necesitamos en un solo comando.

convert `ls -v *.jpg` foobar.pdf

Diviértete;) F.


Podrías usar

convert ''%d.jpg[1-132]'' file.pdf

a través de https://www.imagemagick.org/script/command-line-processing.php :

Otro método para hacer referencia a otros archivos de imagen es mediante la incrustación de un carácter de formato en el nombre de archivo con un rango de escena. Considera el nombre del archivo image-%d.jpg[1-5] . El comando

magick image-%d.jpg[1-5] hace que ImageMagick intente leer imágenes con estos nombres de archivo:

image-1.jpg image-2.jpg image-3.jpg image-4.jpg image-5.jpg

Ver también https://www.imagemagick.org/script/convert.php


Todas las respuestas anteriores fallaron cuando quise combinar muchas imágenes jpeg de alta resolución (de un libro escaneado).

Imagemagick intentó cargar todos los archivos en la RAM, por lo que utilicé el siguiente enfoque en dos pasos:

find -iname "*.JPG" | xargs -I''{}'' convert {} {}.pdf pdfunite *.pdf merged_file.pdf

Tenga en cuenta que con este enfoque, también puede usar GNU paralelo para acelerar la conversión:

find -iname "*.JPG" | parallel -I''{}'' convert {} {}.pdf