我创建了一个需要将 PDF 文件转换为图像文件的程序,对于这个 GhostScript 是最好的选择。但是偶尔,库会完全停在一个页面上并且不会继续,它只是继续使用 CPU 能力并继续工作,就好像它可能陷入无限循环一样。该错误很容易重现,因为它每次都发生在它发生的特定 PDF 文件上,尽管 GhostScript 没有给出任何类型的错误,而且 PDF 文件本身没有任何异常之处看。
但是,我已经能够发现停滞是由于 pdf 文件中的一个或多个特定元素造成的,并且通过删除这些元素,pdf 将很容易在 GhostScript 中呈现,但这不是解决方案,也不是我可以使用的答案.
PDF 链接* - http://www.filedropper.com/usjunis1-32webtest
*保存与 PDF-XChange 编辑器的免费版本,所以它在顶部有水印,但它是造成停滞的正方形。我也看到它发生在矢量图形对象上,因此它不仅限于正方形。
代码 -
private void startImageProcessing(String pdfFile)
{
GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(new Version(0, 0, 0), Directory.GetCurrentDirectory() + @"\gsdll32.dll", string.Empty, GhostscriptLicense.GPL);
Ghostscript.NET.Processor.GhostscriptProcessor processor = new Ghostscript.NET.Processor.GhostscriptProcessor(gvi, true);
processor.StartProcessing(CreateTestArgs(pdfFile, pdfFile.Substring(0, pdfFile.Length - 4) + "\\"+prefix+"-%03d.jpg", 72 * scale), new ConsoleStdIO(true));
}
private static string[] CreateTestArgs(string inputPath, string outputPath, int dpi)
{
List<string> gsArgs = new List<string>();
gsArgs.Add("-dSAFER");
gsArgs.Add("-dBATCH");
gsArgs.Add("-dNOPAUSE");
gsArgs.Add("-sDEVICE=jpeg");
gsArgs.Add("-r" + dpi);
gsArgs.Add("-dJPEGQ=100");
gsArgs.Add("-dNumRenderingThreads=" + Environment.ProcessorCount.ToString());
gsArgs.Add("-dTextAlphaBits=4");
gsArgs.Add("-dGraphicsAlphaBits=4");
gsArgs.Add(@"-sOutputFile=" + outputPath);
gsArgs.Add(@"-f" + inputPath);
return gsArgs.ToArray();
}
我还创建了一个 pdf 文件,仅包含一个错误的测试元素,并且在由 Adobe Acrobat 和 PDF-XChange Editor 保存时都有错误,因此错误不是由于我的特定程序造成的我也曾经保存过 PDF。