这些是我想要实现的步骤:
到目前为止,我对#2 感兴趣。
首先,我下载了 gswin32c.exe 和 gsdll32.dll 并设法手动将PDF转换为图片集合(我打开 cmd 并运行命令bellow):
gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf
然后我想,我会将 gswin32c.exe 和 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中没有输出任何内容。有人知道为什么吗?任何建议都将受到高度赞赏。
答案 0 :(得分:3)
我已经尝试了你的代码,它似乎工作正常。我建议检查以下内容:
验证您的somepdf.pdf是否位于gs进程的工作文件夹中,或者在命令行中指定文件的完整路径。通过这样做来看看ghostscript的输出也很有用:
.... process1.StartInfo.RedirectStandardOutput = true; process1.StartInfo.UseShellExecute = false; process1.Start(); //读取输出 string output = process1.StandardOutput.ReadToEnd(); ... process1.WaitForExit(); ...
如果gs找不到你的文件,你会在输出流中得到一个“错误:/ somefinedfilename in(somepdf.pdf)”。
另一个建议是继续编写脚本而不等待gs进程完成并生成生成的image_N.jpg文件。我想添加process1.WaitForExit可以解决问题。