这些是我想要实现的步骤:
>在服务器上上载PDF文档.
>使用GhostScript将PDF文档转换为一组图像(每个页面都转换为图像).
>将图像集合发送回客户端.
到目前为止,我对#2感兴趣.
首先,我下载了gswin32c.exe和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和gsdll32.dll放到我的web项目的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();
解决方法
我已经尝试过你的代码,它似乎工作正常.我建议检查以下内容:
>验证somepdf.pdf是否位于gs进程的工作文件夹中,或者在命令行中指定文件的完整路径.通过执行以下操作来查看ghostscript的输出也很有用:
….
process1.StartInfo.RedirectStandardOutput = true;
process1.StartInfo.UseShellExecute = false;
process1.Start();
//读取输出
string output = process1.StandardOutput.ReadToEnd();
…
process1.WaitForExit();
…
如果gs找不到你的文件,你会在输出流中得到一个“Error:/ undefinedfilename in(somepdf.pdf)”.>另一个建议是您继续使用脚本而不等待gs进程完成并生成生成的image_N.jpg文件.我想添加process1.WaitForExit应该可以解决这个问题.