2009-12-21 80 views
3

服务器上的PDF转换为图像的集合,这些都是我想实现的步骤:使用GhostScript的

  1. 上传服务器上的PDF文档。
  2. 使用GhostScript将PDF文档转换为一组图像(每页都转换为图像)。
  3. 将图像集合发送回客户端。

到目前为止,我对#2感兴趣。

首先,我下载了两个gswin32c.exegsdll32.dll和管理,以PDF文件手动转换为图像的集合(我打开CMD 运行命令波纹管):

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=image_%d.jpg somepdf.pdf 

然后我想,我会把gswin32c.exegsdll32.dll放到我的web项目的ClientBin中,然后通过Process运行.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中没有输出任何内容。任何人都知道为什么?任何建议将不胜感激。

回答

3

我试过你的代码,它似乎工作正常。我会建议您检查以下几件事:

  1. 验证您somepdf.pdf是在GS进程的工作文件夹或指定命令行文件的完整路径。通过做这样的事情来看到ghostscript的输出也是有用的:

    .... process1.StartInfo.RedirectStandardOutput = true; process1.StartInfo.UseShellExecute = false; process1.Start(); //读取输出 string output = process1.StandardOutput.ReadToEnd(); ... process1.WaitForExit(); ...

    如果gs找不到您的文件,您将在输出流中收到“(错误:/ undefinedfilename in(somepdf.pdf)”。

  2. 另一个建议是,您不用等待gs过程完成并生成生成的image_N.jpg文件即可继续执行脚本。我想加入process1.WaitForExit应该可以解决这个问题。