2010-11-26 21 views
18

¿Cuáles son los parámetros que debo aprobar? La versión de Ghostscript que estoy usando es 8.71.Usando Ghostscript para convertir JPEG a PDF

+1

Como se mencionó en otra parte de esta página, el uso de Ghostscript para esto innecesariamente decodifica y vuelve a codificar los datos JPEG. Ver img2pdf en su lugar, en esta página. –

Respuesta

12
gs \ 
-sDEVICE=pdfwrite \ 
-o foo.pdf \ 
    /usr/local/share/ghostscript/8.71/lib/viewjpeg.ps \ 
-c \(my.jpg\) viewJPEG 

lee my.jpg y produce foo.pdf. Deberá encontrar dónde instaló su instalación el programa PostScript viewjpeg.ps.

+1

use 'locate' para encontrar la ubicación de' viewjpeg.ps' –

1

GhostScript es un intérprete PostScript, por lo que no admite directamente una entrada JPEG, solo una salida JPEG. Dicho esto, admite la descompresión JPEG (excepto JPEG progresivo).

Hay un programa PostScript y una secuencia de comandos de shell que lo acompaña que puede utilizar para aprovechar esta llamada jpeg2eps. Para obtener un PDF, la mayoría de los sistemas tienen el script pstopdf disponible para su uso, que ejecuta cada uno de los archivos de entrada (se usaría el resultado del script jpeg2eps) a través de GhostScript.

10

He estado utilizando la misma línea de comandos básica que Henry dio en su respuesta desde hace bastante tiempo en un simple script de Bash, con algunos retoques.

Mi guión completo convierte varias imágenes JPEG a un PDF de varias páginas, usando este comando modificado:

gs \ 
-sDEVICE=pdfwrite \ 
-o foo.pdf \ 
    /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \ 
-c "(1st.jpg) viewJPEG showpage \ 
    (2nd.jpg) viewJPEG showpage \ 
    (3rd.jpg) viewJPEG showpage \ 
    (last.jpg) viewJPEG showpage" 

Se llama así:

jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]] 

El problema es que este comando usaría el mismo tamaño de página predeterminado (por defecto) de Ghostscript (generalmente Carta o A4 en modo retrato), y cada imagen JPEG se ajustará para ajustarse a este ancho de página y/o altura de página, ubicándose en la esquina inferior izquierda.

Mi script hace que cada página PDF use las mismas dimensiones de página que el JPEG original de la página. Para la detección automática de las dimensiones del JPEG, utilizo identify comandos de ImageMagick:

identify -format "%[fx:(w)] %[fx:(h)]" some.jpeg 

Este es el código del guión completo:

#!/bin/bash 
# 
############################################################################# 
# 
# Shellscript to convert a set of JPEG files to a multipage PDF. 
# 
# Requirements: (1) Ghostscript needs to be installed on the local system. 
#    (2) ImageMagick needs to be installed on the local system. 
# 
# Usage: jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]] 
# 
# Copyright (c) 2007, <[email protected]> 
#    Use, distribute and modify without any restrictions. 
# 
# Versions: 
#   v1.0.0, Jul 12 2007: initial version 
#   v1.0.1, Jan 07 2011: set viewJPEG.ps path (self-compiled GS 9.02) 
# 
############################################################################# 

outfile=$1 
shift 

param="" 
for i in "[email protected]" ; do 
    dimension=$(identify -format "%[fx:(w)] %[fx:(h)]" "${i}") 
    param="${param} <</PageSize [${dimension}]>> setpagedevice (${i}) viewJPEG showpage" 
done 

gs \ 
    -sDEVICE=pdfwrite \ 
    -dPDFSETTINGS=/prepress \ 
    -o "$outfile" \ 
    /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \ 
    -c "${param}" 
+0

hay y usé su script sin 'identify-format' y se generó el pdf, pero las imágenes .jpg están alineadas en el botón ¿Cómo puedo llevarlas a la parte superior de la página en pdf? . y 'identifique -format"% [fx: (w)]% [fx: (h)] "some.jpeg ' devuelve nulo, así que no puedo usarlo. – run

+0

@run: ¿con qué sistema operativo estás ejecutando 'identify'? ¿Qué te dice 'identity -version'? También puede usar 'identify some.jpeg' manualmente, que devolverá una línea que indica las dimensiones WxH del JPEG en píxeles, que luego puede usar para insertar manualmente en la línea de comandos .... –

+0

unix. y lo alcanzo por 'dimension = $ (identificar-formateo"% w% h "" $ {x} ")' pero ¿hay alguna otra manera que usar 'ancho y alto' para establecer la imagen en la parte superior de la página en lugar de fondo. Estaría encantado si recibo algún enlace para obtener una buena documentación sobre esto. – run

4

, alternativamente, en algunas distribuciones de Linux convert pic1.jpg pic2.jpg out.pdf hace el trabajo con resultados mixtos

+0

Funcionó bien para mí. Advertencia: muy hambriento de memoria, la fusión de 80 archivos JPEG tomó 30 minutos de intercambio aquí. – liori

+1

Eso es porque ImageMagick decodifica y recodifica completamente los datos JPEG. No solo es lento y requiere mucha memoria, sino que también genera [pérdida de generación] (http://en.wikipedia.org/wiki/Generation_loss). Ver img2pdf en otro lugar en esta página. –

20

https://gitlab.mister-muffin.de/josch/img2pdf

según lo mencionado por PleaseStand Ghostscript decodificar los datos JPEG , lo que resulta en generation loss, así como el rendimiento "diez a cien" veces peor que img2pdf.

ImageMagick (es decir, convert) también decodifica y vuelve a codificar las imágenes.

+1

Gracias por esto. El uso de cualquiera de los otros métodos lleva mucho tiempo con cualquier cantidad no trivial de imágenes. – emacsomancer

1

Tengo la versión de Ghostscript 9.10, por lo que el comando con la siguiente línea NO trabajó para mí

/usr/local/share/ghostscript/9.02/lib/viewjpeg.ps

así que modifid el comando y editado la línea y INSTED utilizaron este, que trabajó para mí

viewjpeg.ps 

Así que la NUEVO COMANDO MODIFICADOS es el siguiente:

gs \ 
    -sDEVICE=pdfwrite \ 
    -o foo.pdf \ 
     viewjpeg.ps \ 
    -c "(1st.jpg) viewJPEG showpage \ 
     (2nd.jpg) viewJPEG showpage \ 
     (3rd.jpg) viewJPEG showpage \ 
     (last.jpg) viewJPEG showpage" 
Cuestiones relacionadas