2009-05-19 94 views
15

我一直在使用ghostscript来执行PDF从图像生成单页图像。现在我需要能够从pdf中拉出多个页面并产生一个长的垂直图像。Ghostscript Multipage PDF to PNG

有没有一个论点,我错过了,这将允许这?

到目前为止我用下面的参数,当我叫出的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 
      }; 

回答

10

我最终加入“%d”到“OUTPUTFILE”参数,这样它会产生每页一个文件。然后,我刚读了所有的文件,并在我的C#代码缝合在一起的他们,像这样:

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

的是它在某种程度上可以在脚本/ bash的水平,离不开高水平代码的接线起来,像上面C#。 – Supra 2015-12-07 09:57:32

1

首先检查输出设备的选择;但我不认为有这样的选择。

很可能你需要自己做一些拼版,或者让GhostScript做到这一点(你必须编写一个PostScript程序),或者使用ImageMagick或类似的东西缝合生成的渲染页面。

如果你想尝试的PostScript路线(可能是最有效的),检查包括在GhostScript的包N合一的例子。

6

如果你可以使用ImageMagick的,你可以利用其良好的一个命令:

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

哪里

  • -density 144以dpi分辨率determins如果需要增加它,默认是72
  • -type Grayscale使用它,如果你的PDF没有颜色,你会节省一些KB的最终图像