我一直在使用ghostscript做pdf来从pdf生成单页图像。现在我需要能够从pdf中提取多个页面并生成一个长垂直图像。
我是否缺少允许这样的论点?
到目前为止,当我呼唤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
};
答案 0 :(得分: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
}
答案 1 :(得分:8)
如果你可以使用ImageMagick,你可以使用它的一个好命令:
montage -mode Concatenate -tile 1x -density 144 -type Grayscale input.pdf output.png
其中
-density 144
以dpi确定分辨率,如果需要则增加,默认为72 -type Grayscale
如果您的PDF没有颜色,请使用它,您将在生成的图像中保存一些KB 答案 2 :(得分:1)
首先检查输出设备选项;但我认为没有选择。
最有可能你需要自己做一些拼版,要么让GhostScript这样做(你必须编写一个PostScript程序),要么用ImageMagick或类似东西缝合生成的渲染页面。
如果您想尝试PostScript路线(可能是最有效的),请检查GhostScript包中包含的N-up示例。