使用C#或命令行将PDF转换为JPG或PNG

时间:2011-01-14 20:38:16

标签: c# pdf

我需要将PDF文件转换为图片。我用于测试目的“Total PDF Converter”提供命令行,但它是共享软件,我需要找到一个免费的替代品。

有谁知道这样的工具,甚至可能是免费的C#库?

7 个答案:

答案 0 :(得分:25)

since version 7软件包中的convert工具(或magick ImageMagick)可以执行此操作(还有更多)。

最简单的形式就是

convert myfile.pdf myfile.png

magick myfile.pdf myfile.png

答案 1 :(得分:12)

这是一个老问题,但由于缺少GhostScript答案且没有多页 PDF导出的提示,我认为添加另一个变体是可以的。

gs -dBATCH -dNOPAUSE -sDEVICE=pnggray -r300 -dUseCropBox -sOutputFile=item-%03d.png examples.pdf

选项说明

  • dBatchdNOPAUSE只是告诉gs以批处理模式运行,这意味着 或多或少它不会问任何问题。这些参数也是 如果要在bash脚本中运行命令,这很重要。
  • sDEVICE告诉gs要生成什么输出格式。 pnggray是为了 灰度,png16m,用于24位RGB颜色。如果你坚持创造 Jpegs使用-sDEVICE=jpeg生成彩色JPEG文件。使用-dJPEGQ=N(N是0到100之间的整数,默认值为75) 用于控制Jpgeg质量的参数。
  • -r300将扫描分辨率设置为300dpi。如果你喜欢更小的 输出大小使用-r70或者如果输入pdf则使用高限制 -r600。如果您有300dpi的PDF并指定-r600,您的图像将被放大。
  • -dUseCropBox告诉gs使用CropBox(如果已定义)。 CropBox是 指定页面上的感兴趣区域。如果你有一个带有的pdf 大的白色边距,你不希望这个边距在你的输出 选项可能帮助。
  • -sOutputFile定义输出文件的名称。 %03d.png部分 告诉gs包含多个文件的计数器。两页pdf 会产生两个名为item-001.png和item-002.png。
  • 的文件
  • 最后一个(未命名的参数是输入文件。)

<强>状况: imagemagick的convert命令在内部使用gs命令。如果你可以用imagemagick转换pdf,你已经安装了gs。

安装ghostscript:

RHEL:

yum install ghostscript

SLES:

zypper install ghostscript

于Debian / Ubuntu:

sudo apt-get install ghostscript

视窗:

您可以在http://www.ghostscript.com/download/gsdnld.html

下找到Windows二进制文件

答案 2 :(得分:6)

问题很老,但最近我发现这个解决方案对我有用:https://github.com/jhabjan/Ghostscript.NET。它也可以作为nuget下载。

以下是将所有pdf页面转换为png图像的示例代码:

    private static void Test()
    {
        var localGhostscriptDll = Path.Combine(Environment.CurrentDirectory, "gsdll64.dll");
        var localDllInfo = new GhostscriptVersionInfo(localGhostscriptDll);

        int desired_x_dpi = 96;
        int desired_y_dpi = 96;

        string inputPdfPath = "test.pdf";

        string outputPath = Environment.CurrentDirectory;

        GhostscriptRasterizer _rasterizer = new GhostscriptRasterizer();

        _rasterizer.Open(inputPdfPath, localDllInfo, false);

        for (int pageNumber = 1; pageNumber <= _rasterizer.PageCount; pageNumber++)
        {
            string pageFilePath = Path.Combine(outputPath, "Page-" + pageNumber.ToString() + ".png");

            Image img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
            img.Save(pageFilePath, ImageFormat.Png);
        }

        _rasterizer.Close();
    }

答案 3 :(得分:2)

您可能想查看此免费解决方案

http://www.codeproject.com/Articles/32274/How-To-Convert-PDF-to-Image-Using-Ghostscript-API

轻松将PDF转换为图像(单个文件或多个文件) 是开源的,并使用ghostscript(免费下载)

使用示例:

converter = new PDFConverter();
converter.JPEGQuality = 90;
converter.OutputFormat = "jpg";
string output = "output.jpg";
converter.Convert("input.pdf", output);

答案 4 :(得分:2)

在我的情况下,@ Thomas答案无效。 我猜测只有在pdf中包含图片时,它才有效。 就我而言,有效的方法是pdftoppm(来自https://askubuntu.com/a/50180/37527的信息):

pdftoppm input.pdf outputname -png

这将以outputname-01.png格式输出PDF中的每个页面,其中01是页面的索引。

转换一页PDF

pdftoppm input.pdf outputname -png -f {page} -singlefile

{page}更改为页码。它的索引为1,所以-f 1将是第一页。

指定转换后的图像的分辨率

此命令的默认分辨率为150 DPI。增加它会导致更大的文件大小和更多细节。

要提高转换后的PDF的分辨率,请添加选项-rx {resolution}-ry {resolution}。例如:

pdftoppm input.pdf outputname -png -rx 300 -ry 300

答案 5 :(得分:1)

你应该使用iText sharp。它是一个用于处理PDF的开源java项目的端口。 http://sourceforge.net/projects/itextsharp/

答案 6 :(得分:1)

2JPEG命令行工具可以执行此操作,例如:

2jpeg.exe -src&#34; C:\ In \ * .pdf&#34; -dst&#34; C:\ Out&#34;