2012-04-04 9 views
7

estoy usando GS hacer la conversión de PDF a JPEG siguiente es el comando que utilizo:Ajuste automático de altura/anchura para el convertida JPEG de un PDF utilizando GhostScript

gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf 

En este comando como u puede ver -g500x300 es establecer el tamaño de imagen convertida (Ancho x Alto).

¿Hay alguna manera de simplemente configurar el ancho sin tener que ingresar la altura para que se base en el ancho para escalar la altura con su relación de aspecto original? Sé que se puede lograr utilizando ImageMagick convert donde simplemente pone 0 en el parámetro de altura, es decir, -resize 500x0. Intenté con GhostScript pero no creo que sea la forma correcta de hacerlo.

Decidí no utilizar ImageMagick convertir por lo que porque es muy lento a la hora de convertir un archivo PDF de varias páginas de gran tamaño.

¡Gracias por la ayuda!

Respuesta

5

Esta publicación explica por qué ghostscript es más rápido - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted, y la única solución para solucionarlo implicaría modificar el código de imagemagick.

Desafortunadamente, el tamaño de salida autodeterminado no es compatible con ghostscript. Esto se debe principalmente a que la opción -g utilizada actualmente determina el tamaño del dispositivo que contendrá la salida representada, y no la salida renderizada. Ese tamaño de salida está cambiando debido al interruptor -dPDFFitPage que luego intenta hacer coincidir el tamaño del dispositivo. Y aunque puede definir solo la altura del 'dispositivo' jpeg usando -dDEVICEHEIGHT=n, eso dejará el ancho del dispositivo en el valor predeterminado sin cambios.

Aunque es una solución algo tediosa, puede usar ghostscript o imagemagick para obtener el ancho y el alto de la (s) página (s) en pdf. Para hacer esto usando ghostscript, vea la respuesta al Using GhostScript to get page size. A continuación, puede calcular el ancho adecuado para establecer el indicador -g para mantener la relación de aspecto. Puntos extra si puede descifrar un solo conjunto de comandos para hacer todo esto :)

4

Puede escribir un programa PostScript para hacerlo con la suficiente rapidez. Aquí es un comienzo:

 
%! 
% usage: gs -sFile=____.pdf scale.ps 

/File where not { 
    (\n *** Missing source file. \(use -sFile=____.pdf\)\n) = 
    Usage 
} { 
    pop 
}ifelse 

% Get the width and height of a PDF page 
% 
/GetSize { 
    pdfgetpage currentpagedevice 
    1 index get_any_box 
    exch pop dup 2 get exch 3 get 
    /PDFHeight exch def 
    /PDFWidth exch def 
} def 


% 
% The main loop 
% For every page in the original PDF file 
% 
1 1 PDFPageCount 
{ 
    /PDFPage exch def 
    PDFPage GetSize 

% In here, knowing the desired destination size 
% calculate a scale factor for the PDF to fit 
% either the width or height, or whatever 
% The width and height are stored in PDFWidht and PDFHeight 
    PDFPage pdfgetpage 
    pdfshowpage 
} for 

pdfgetpage y pdfshowpage son extensiones de Ghostscript internos del lenguaje PostScript para el manejo de archivos PDF.

+0

¿Puede explicar de manera detallada cómo utilizar este programa? ¿Me gusta hacer un script de shell y ejecutar eso? –

+0

Su PostScript, por lo que lo alimenta al intérprete de PostScript. Para ser preciso, lo pasa como el argumento de la línea de comando del archivo de entrada a Ghostscript. El comentario como la primera línea del programa incluso le da el uso. Tenga en cuenta que esto no es una implementación de trabajo completa. – KenS

Cuestiones relacionadas