【问题标题】:Convert PDF to JPG or PNG using C# or Command Line [closed]使用 C# 或命令行将 PDF 转换为 JPG 或 PNG [关闭]
【发布时间】:2011-06-09 09:40:52
【问题描述】:

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

有没有人知道这样的工具或者甚至是免费的 C# 库?

【问题讨论】:

    标签: c# pdf


    【解决方案1】:

    ImageMagick 捆绑包中的convert 工具(或magick since version 7)可以做到这一点(以及更多)。

    最简单的形式就是

    convert myfile.pdf myfile.png
    

    magick myfile.pdf myfile.png
    

    【讨论】:

    • 要扩展这个答案,您可以使用csharp-station.com/HowTo/ProcessStart.aspx
    • 我试过ImageMagick,它在图像转换方面效果很好。要使用 pdf,您还需要安装 GhostScript。 sourceforge.net/projects/ghostscript
    • 我试过了,但由于某种原因,我只得到一个中间有黑线的白页,旁边有一些随机文本..
    • 我也有点困惑,因为这里的许可系统。 ImageMagick 在 Apache 许可下获得许可,这很好,但 ghostscript 是 GPL。当我的程序附带商业程序时,这对我意味着什么?
    • @Martin 这可能意味着您需要购买commercial license from Artifex 或使用其他东西
    【解决方案2】:

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

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

    选项说明

    • dBatchdNOPAUSE 只是告诉 gs 以批处理模式运行,这意味着 或多或少它不会问任何问题。这些参数也是 如果您想在 bash 脚本中运行该命令,这一点很重要。
    • sDEVICE 告诉 gs 生成什么输出格式。 pnggray 用于 灰度,png16m 用于 24 位 RGB 颜色。如果你坚持创作 Jpeg 使用-sDEVICE=jpeg 生成彩色JPEG 文件。使用-dJPEGQ=N(N 为 0 到 100 之间的整数,默认为 75) 控制 Jpgeg 质量的参数。
    • -r300 将扫描分辨率设置为 300dpi。如果你喜欢更小的 输出大小使用-r70,或者如果您输入的pdf具有高分辨率,请使用 -r600。如果您有 300dpi 的 PDF 并指定 -r600,您的图像将被放大。
    • -dUseCropBox 告诉 gs 使用 CropBox(如果已定义)。裁剪框是 指定页面上的感兴趣区域。如果你有一个带有 大的白色边距,你不希望你的输出上有这个边距 选项可能有帮助。
    • -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 二进制文件

    【讨论】:

      【解决方案3】:

      问题很老了,但最近我发现了这个对我有用的解决方案: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();
          }
      

      【讨论】:

      • 警告:不要忘记在最后调用 _rasterizer.Close()。 (这很重要并避免出现异常,以防您在循环中使用此代码)。
      • 是否有替代“GetPage”的方法来获取您所知道的整个文档?
      【解决方案4】:

      @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】:

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

        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);
        

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 由于 GPL 许可,我无法使用它...
          【解决方案7】:

          2JPEG命令行工具可以做到,比如:

          2jpeg.exe -src "C:\In\*.pdf" -dst "C:\Out"

          【讨论】:

          • 很抱歉,但它并没有很多错误。
          • 嗨 Turtle,您能告诉我有关您遇到的 2JPEG 错误的更多信息吗?
          猜你喜欢
          • 1970-01-01
          • 2020-11-01
          • 1970-01-01
          • 2010-12-16
          • 1970-01-01
          • 2012-09-15
          • 2012-04-09
          • 2011-05-11
          • 2013-12-26
          相关资源
          最近更新 更多