You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Ghostscript.NET的rasterizer.GetPage返回null问题求助

问题:Ghostscript.NET提取PDF图片时GetPage返回null

我正尝试使用C#的Ghostscript.NET从PDF文件中提取图片。已安装32位和64位的Ghostscript DLL,并在项目中添加了引用。使用网上的示例代码时,出现img为null的错误,代码如下:

using System;
using Ghostscript.NET.Rasterizer;
using System.IO;
using Ghostscript.NET;
using System.Drawing.Imaging;

namespace StackOverflowExample
{
    class Program
    {
        static void Main(string[] args)
        {
            int desired_dpi = 96;

            string inputPdfPath = @"C:\Users\orubio\Documents\Pruebas\test.pdf";
            string outputPath = @"C:\Users\orubio\Documents\Pruebas\";

            GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(@"C:\Program Files (x86)\gs\gs9.56.1\bin\gsdll32.dll");

            using (var rasterizer = new GhostscriptRasterizer())
            {
                rasterizer.Open(inputPdfPath, gvi, false);

                for (var pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
                {
                    var pageFilePath = Path.Combine(outputPath, string.Format("Page-{0}.png", pageNumber));

                    var img = rasterizer.GetPage(desired_dpi, pageNumber);
                    img.Save(pageFilePath, ImageFormat.Png);

                    Console.WriteLine(pageFilePath);
                }
            }
        }
    }
}

运行时rasterizer.GetPage返回null,导致后续img.Save报错。


解决方案
  • 匹配项目平台与Ghostscript DLL位数
    项目编译平台必须和使用的Ghostscript DLL位数一致:

    • 若项目目标平台为x64,改用64位DLL路径:@"C:\Program Files\gs\gs9.56.1\bin\gsdll64.dll"
    • 若为x86,保持32位DLL路径。可通过右键项目→属性→生成→平台目标查看和修改。
  • 验证PDF文件状态
    确认目标PDF未损坏、未加密且页面非空:

    • 用PDF阅读器打开test.pdf,检查所有页面是否正常显示
    • 若PDF加密,需在rasterizer.Open时传入密码参数,或先解密PDF
  • 调整内存模式参数
    将rasterizer.Open的第三个参数改为true,启用内存模式加载,部分场景可解决加载异常:

    rasterizer.Open(inputPdfPath, gvi, true);
    
  • 检查版本兼容性
    确保Ghostscript.NET版本与安装的Ghostscript 9.56.1兼容,可尝试更新Ghostscript.NET到最新稳定版,或更换匹配的Ghostscript版本。

  • 捕获Ghostscript内部错误
    添加错误事件监听,获取更详细的错误日志,定位问题根源:

    using (var rasterizer = new GhostscriptRasterizer())
    {
        rasterizer.GhostscriptError += (sender, e) =>
        {
            Console.WriteLine($"Ghostscript错误详情: {e.Message}");
        };
        rasterizer.Open(inputPdfPath, gvi, false);
        // 后续页面处理代码...
    }
    

内容的提问来源于stack exchange,提问作者Oscar Rubio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:05:24