使用GhostScript将PDF转换为服务器上的图像集合

时间:2009-12-21 16:31:22

标签: asp.net ghostscript

这些是我想要实现的步骤:

  1. 在服务器上上传PDF文档。
  2. 使用GhostScript将PDF文档转换为一组图像(每个页面都转换为图像)。
  3. 将图像集合发送回客户端。
  4. 到目前为止,我对#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中没有输出任何内容。有人知道为什么吗?任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

我已经尝试了你的代码,它似乎工作正常。我建议检查以下内容:

  1. 验证您的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)”。

  2. 另一个建议是继续编写脚本而不等待gs进程完成并生成生成的image_N.jpg文件。我想添加process1.WaitForExit可以解决问题。