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