1 votos

Línea de comandos para crear un documento PDF a partir de un lote de imágenes

¿Cómo crear un documento PDF a partir de un lote de imágenes?

\===

A continuación se muestra lo que he intentado antes de publicar esta pregunta:

En ImageMagick pero el documento PDF generado es demasiado grande:

convert *.ppm book.pdf

En Vista previa herramienta, el documento creado es mucho más pequeño pero crea márgenes.

En sorbos manera, no funciona por alguna razón:

sips -s format pdf *.ppm --out 'book.pdf' 1>/dev/null 2>&1

También img2pdf que tiene buena pinta pero no he podido instalarlo en mac (no está en la lista de paquetes de brew).

0 votos

Automator tiene una acción para "crear PDF a partir de imágenes" (y otra para comprimir imágenes dentro de los PDF).

0 votos

¿Has pensado en convertir los archivos .ppm a jpeg o algo similar y luego trabajar con archivos de imagen normales?

0 votos

Sips puede no funcionar con archivos ppm.

3voto

benwiggy Puntos 8

La propia acción Automator de Apple utiliza un script de Python para acceder a Core Graphics. Funciona, pero es lento. He aquí un mejor script que utiliza el nuevo marco PDFKit de Apple.

Puede utilizarlo desde el Terminal con los nombres de los archivos como argumentos, o puede incluirlo en una acción de Automator Run Shell script.

Sin instalaciones ni dependencias.

#!/usr/bin/python
# coding: utf-8
#
# IMAGE2PDF v.2.0 : Convert image files to one PDF.
# by Ben Byram-Wigfield 

import sys, os
import Quartz as Quartz
from LaunchServices import kUTTypePDF
from CoreFoundation import NSImage

def getFilename(filepath, basename):
    fullname = basename + ".pdf"
    i=0
    while os.path.exists(os.path.join(filepath, fullname)):
        i += 1
        fullname = basename + " %02d.pdf"%i
    return os.path.join(filepath, fullname)

def imageToPdf(argv):
    prefix = os.path.dirname(argv[0]) 
    filename = "Combined"
    pdfout = getFilename(prefix, filename)

    for index, eachFile in enumerate(argv):
        image = NSImage.alloc().initWithContentsOfFile_(eachFile)
        if image:
            page = Quartz.PDFPage.alloc().initWithImage_(image)
            if index == 0:
                pageData = page.dataRepresentation()
                pdf = Quartz.PDFDocument.alloc().initWithData_(pageData)
            else:
                pdf.insertPage_atIndex_(page, index)

    pdf.writeToFile_(pdfout)

if __name__ == "__main__":
    imageToPdf(sys.argv[1:])

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X