Manipulación de PDFs e imagenes en linea de comandos
Crear un jpg con la primera pagina:
gs -q -sDEVICE=jpeg -dBATCH -dNOPAUSE -dFirstPage=1 -dLastPage=1 -r300 -sOutputFile=test.jpg test.pdf
Extraer una imagen, de la primera pagina, (por ejemplo la portada):
pdfimages -f 1 -l 1 -j fichero.pdf pgs
Un detalle: lo que hace pdfimages no es "generar" una imagen con el contenido de la página sino extraer los elementos de la página que sean imagenes. Es decir si el PDF lo que tiene en la pag 1 son 3 imágenes y un texto, el comando producirá 3 ficheros de imagen, y nada para el texto.
Si lo que queremos es realmente "renderizar" el PDF a PNG, podemos usar este comando:
pdftoppm -r 300 -png pdf.pdf prefijo-paginas
Secuencia de comandos para partiendo de un libro que estaba escaneado, con una imagen por página, pero con 2 paginas reales por imagen y muchos bordes blancos, hacer un PDF mejor, con una página real por pagina PDF y sin bordes blancos:
# Extraer todas las imágenes pdfimages -j fichero.pdf pgs
# rotarlas 90 a la izq for f in ???.jpg ; do echo "$f" ; convert "$f" -rotate 270 "${f%.jpg}_r.jpg" ; done
# Cortar las imágenes por la mitad, supongamos que la imagen es de 1200x500 for f in pgs-???.ppm ; do convert "$f" -crop 600x500! "${f.%.ppm}.%d.ppm"; done
# Cortarlas en 2 veces for f in ???_r.jpg ; do echo $f ; convert "$f" -crop 1330x2340+0+200\! "${f%.jpg}_r_c1.jpg"; convert "$f" -crop 1330x2340+1330+200\! "${f%.jpg}_r_c2.jpg" ; done
# Tipico caso de banda horizontal arriba y banda horizontal abajo. La de arriba tiene 282px y la imagen que quiero conservar 1490px. El ancho es 1200.
for f in ???.jpg ; do convert "$f" -crop 1200x1490+0+282\! "${f%.jpg}.c.jpg" ; done
# Quitar los bordes blancos for f in pgs-???.pbm.[01].jpg ; do convert "$f" +repage -fuzz "99%" -trim "$f.trim.jpg"; done
# Recrear el PDF a partir de las imágenes nuevas: convert pgs-???.ppm.?.ppm fichero.pdf
Crear un PDF a partir de imágenes convirtiendo el tamaño (como mucho de X de alto o de Y de ancho, respetando el aspecto)
convert * -resize XxY fichero.pdf
Ponerle metadata (XMP) para que el e-reader lo muestre:
# extraer metadata a fichero pdftk f1.pdf dump_data output metadata.txt # Editar metadata.txt a gusto del consumidor (se pueden añadir campos nuevos) pdftk f1.pdf update_info metadata.txt output f2.pdf
Un método mejor que no requiere archivo intermedio y edición manual:
exiftool -Title="This is my title" -Author="Cobarde Anonimo" my.pdf