2009-05-19 16 views
15

He estado usando ghostscript para hacer pdf a la generación de imágenes de una sola página desde el pdf. Ahora necesito poder extraer varias páginas del pdf y producir una imagen vertical larga.Ghostscript Multipágina PDF a PNG

¿Existe un argumento que me falta que permita esto?

Hasta el momento estoy usando los siguientes argumentos cuando llamo a ghostscript:

string[] args ={ 
       "-q",      
       "-dQUIET",     
       "-dPARANOIDSAFER", // Run this command in safe mode 
       "-dBATCH", // Keep gs from going into interactive mode 
       "-dNOPAUSE", // Do not prompt and pause for each page 
       "-dNOPROMPT", // Disable prompts for user interaction       
       "-dFirstPage="+start, 
       "-dLastPage="+stop, 
       "-sDEVICE=png16m", 
       "-dTextAlphaBits=4", 
       "-dGraphicsAlphaBits=4", 
       "-r300x300",     

       // Set the input and output files 
       String.Format("-sOutputFile={0}", tempFile), 
       originalPdfFile 
      }; 

Respuesta

10

Terminé agregando "% d" al parámetro "OutputFile" para que generara un archivo por página. A continuación, acabo de leer de seguridad de todos los archivos y los cosen juntos en mi C# código de este modo:

var images =pdf.GetPreview(1,8); //All of the individual images read in one per file 

using (Bitmap b = new Bitmap(images[0].Width, images.Sum(img=>img.Height))) { 
    using (var g = Graphics.FromImage(b)) { 
     for (int i = 0; i < images.Count; i++) { 
      g.DrawImageUnscaled(images[i], 0, images.Take(i).Sum(img=>img.Height)); 
     } 
    } 
    //Do Stuff 
} 
+0

¿Es de alguna manera posible hacerlo en el nivel script/bash sin cablearlo con un código de alto nivel, como C# arriba? – Supra

+0

@Supra 'man gs' tiene una sección para imprimir cada página por separado usando' -sOutputFile = 'con'% d' – dat

1

primer lugar, compruebe las opciones del dispositivo de salida; pero no creo que haya una opción para eso.

Lo más probable es que deba hacer una imposición usted mismo, ya sea que haga que GhostScript lo haga (tendrá que escribir un programa PostScript), o unir las páginas representadas resultantes con ImageMagick o algo similar.

Si desea probar la ruta PostScript (que probablemente sea la más eficiente), consulte los ejemplos N-up incluidos en el paquete GhostScript.

6

Si puede usar ImageMagick, se puede usar uno de sus buenos comandos:

montage -mode Concatenate -tile 1x -density 144 -type Grayscale input.pdf output.png 

donde

  • -density 144 resolución determins en dpi, aumentarla, si es necesario, por defecto es 72
  • -type Grayscale utilizarlo si su PDF no tiene colores, guardará algunos KB en la imagen resultante
Cuestiones relacionadas