Ghostscript 多页 PDF 转 PNG

发布于 2024-07-22 03:06:17 字数 987 浏览 5 评论 0原文

我一直在使用 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
            };

I've been using ghostscript to do pdf to image generation of a single page from the pdf. Now I need to be able to pull multiple pages from the pdf and produce a long vertical image.

Is there an argument that I'm missing that would allow this?

So far I'm using the following arguments when I call out to 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
            };

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

活泼老夫 2024-07-29 03:06:17

我最终将“%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
}

I ended up adding "%d" to the "OutputFile" parameter so that it would generate one file per page. Then I just read up all of the files and stitched them together in my c# code like so:

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
}
残月升风 2024-07-29 03:06:17

如果您可以使用 ImageMagick,则可以使用它的一个好命令:

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

其中

  • -密度 144 确定以 dpi 为单位的分辨率,如果需要,请增加它,默认值为 72
  • -type Grayscale 使用如果您的 PDF 没有颜色,您将在生成的图像中节省一些 KB

If you can use ImageMagick, you could use one of its good commands:

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

where

  • -density 144 determins resolution in dpi, increase it if needed, default is 72
  • -type Grayscale use it if your PDF has no colors, you'll save some KBs in the resulting image
愁以何悠 2024-07-29 03:06:17

首先检查输出设备选项; 但我认为没有其他选择。

最有可能的是,您需要自己进行一些拼版,要么让 GhostScript 来做(您必须编写 PostScript 程序),要么用 ImageMagick 或类似的东西缝合生成的渲染页面。

如果您想尝试 PostScript 路线(可能是最有效的),请检查 GhostScript 包中包含的 N-up 示例。

First check the output device options; but I don't think there's an option for that.

Most probably you'll need to do some imposition yourself, either make GhostScript do it (you'll have to write a PostScript program), or stitch the resulting rendered pages with ImageMagick or something similar.

If you want to try the PostScript route (likely to be the most efficient), check the N-up examples included in the GhostScript package.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文