这些是我试图实现的步骤:
- 在服务器上上传 PDF 文档。
- 使用 GhostScript 将 PDF 文档转换为一组图像(每个页面都转换为图像)。
- 将图像集合发送回客户端。
到目前为止,我感兴趣的是#2.
首先,我下载了两个gswin32c.exe and gsdll32.dll并设法手动将 PDF 转换为图像集合(我打开cmd并运行以下命令):
gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf
然后我想,我会把gswin32c.exe and gsdll32.dll进入我的网络项目的 ClientBin,并通过进程运行 .exe。
System.Diagnostics.Process process1 = new System.Diagnostics.Process();
process1.StartInfo.WorkingDirectory = Request.MapPath("~/");
process1.StartInfo.FileName = Request.MapPath("ClientBin/gswin32c.exe");
process1.StartInfo.Arguments = "-dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf"
process1.Start();
不幸的是,ClientBin 中没有输出任何内容。有人知道为什么吗?任何建议都将受到高度赞赏。
我已经尝试过你的代码,它似乎工作正常。我建议检查以下事项:
-
验证您的 somepdf.pdf 是否位于 gs 进程的工作文件夹中,或在命令行中指定该文件的完整路径。通过执行以下操作来查看 Ghostscript 的输出也很有用:
....
process1.StartInfo.RedirectStandardOutput = true;
process1.StartInfo.UseShellExecute = false;
进程1.Start();
// 读取输出
字符串输出 = process1.StandardOutput.ReadToEnd();
...
process1.WaitForExit();
...
如果 gs 找不到您的文件,您将在输出流中收到“Error: /undefinedfilename in (somepdf.pdf)”。
另一个建议是您继续执行脚本,而无需等待 gs 进程完成并生成结果 image_N.jpg 文件。我想添加 process1.WaitForExit 应该可以解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)