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

Asp.net 使用GhostScript将PDF转换为服务器上的图像集合,asp.net,ghostscript,Asp.net,Ghostscript,以下是我正在努力实现的步骤: 在服务器上上载PDF文档 使用GhostScript将PDF文档转换为一组图像(每个页面都转换为一个图像) 将图像集合发送回客户端 到目前为止,我对#2感兴趣 首先,我下载了gswin32c.exe和gsdll32.dll,并设法手动将PDF转换为图像集合(我打开cmd并运行下面的命令): 然后我想,我将把gswin32c.exe和gsdll32.dll放入我的web项目的ClientBin,并通过一个进程运行.exe System.Diagnostics.Proc

以下是我正在努力实现的步骤:

  • 在服务器上上载PDF文档
  • 使用GhostScript将PDF文档转换为一组图像(每个页面都转换为一个图像)
  • 将图像集合发送回客户端
  • 到目前为止,我对#2感兴趣

    首先,我下载了gswin32c.exegsdll32.dll,并设法手动将PDF转换为图像集合(我打开cmd并运行下面的命令):

    然后我想,我将把gswin32c.exegsdll32.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(); 
    

    不幸的是,ClientBin中没有输出任何内容。有人知道为什么吗?任何推荐都将不胜感激。

    我已经尝试了您的代码,它似乎运行良好。我建议检查以下事项:

  • 验证somepdf.pdf是否位于gs进程的工作文件夹中,或者在命令行中指定文件的完整路径。通过执行以下操作查看ghostscript的输出也很有用:

    。。。。 process1.StartInfo.RedirectStandardOutput=true; process1.StartInfo.UseShellExecute=false; process1.Start(); //读取输出 字符串输出=process1.StandardOutput.ReadToEnd(); ... process1.WaitForExit();

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

  • 另一个建议是,在不等待gs进程完成并生成结果image_N.jpg文件的情况下继续执行脚本。我想添加process1.WaitForExit应该可以解决这个问题

  • 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();