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路径。可通过右键项目→属性→生成→平台目标查看和修改。
- 若项目目标平台为x64,改用64位DLL路径:
验证PDF文件状态
确认目标PDF未损坏、未加密且页面非空:- 用PDF阅读器打开
test.pdf,检查所有页面是否正常显示 - 若PDF加密,需在
rasterizer.Open时传入密码参数,或先解密PDF
- 用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
相关产品推荐
相关产品推荐

