C#GhostScript-无法成功地从PDF转换为TXT文件

C#GhostScript-无法成功地从PDF转换为TXT文件,c#,winforms,process,ghostscript,C#,Winforms,Process,Ghostscript,我已经成功地使用GhostScript和以下命令行参数从PDF文件中提取文本: gswin32c.exe ^ -q -dNODISPLAY -dSAFER -dDELAYBIND ^ -dWRITESYSTEMDICT ^ -dSIMPLE ^ -c save ^ -f ps2ascii.ps ^ "test.pdf" ^ -c quit ^ >"test.txt" 注意事项:我将以下三个文件从安装目录复制到我的C:\目录中 1)gsdll32.dll

我已经成功地使用GhostScript和以下命令行参数从PDF文件中提取文本:

gswin32c.exe ^
  -q -dNODISPLAY -dSAFER -dDELAYBIND ^
  -dWRITESYSTEMDICT ^
  -dSIMPLE ^
  -c save ^
  -f ps2ascii.ps ^
   "test.pdf" ^
  -c quit ^
  >"test.txt"
注意事项:我将以下三个文件从安装目录复制到我的C:\目录中

1)gsdll32.dll 2)gsdll32.lib 3)gswin32 有人看到我的代码有任何明显的错误吗?如果我能在这里得到任何帮助,我将不胜感激

谢谢

埃文

  • 制作一个名为
    batch.bat
    的批处理文件,如下所示

    rem batch.bat
    rem %1 represents input file name without extension.
    echo off
    gswin32c -q -dNODISPLAY -dSAFER -dDELAYBIND -dWRITESYSTEMDICT -dSIMPLE -c save -f ps2ascii.ps %1.pdf -c quit >%1.txt
    
  • 编译以下代码以获得名为
    myapp.exe的控制台应用程序

    using System.Diagnostics;
    
    class myapp
    {
        public static void Main()
        {
            Process p1 = new Process();
            p1.StartInfo.FileName = "batch.bat";
            p1.StartInfo.Arguments = "test";
            p1.StartInfo.UseShellExecute = false;
    
            p1.Start();
            p1.WaitForExit();
         }
     }
    
  • 按如下所示将所有内容放在同一目录中,然后双击
    myapp.exe
    。完成了


  • 一个明显的错误是,您似乎在代码中运行test.exe,而不是gsWin32c.exe。首先,quote到底是什么?其次,启动错误的应用程序。第三,即使启动了正确的文件,您正在创建的文件也不会包含test.txt的内容。让我们跳过所有的问题,读一下:我将它重命名为Test.exe-这是正确的应用程序。此外,quote是“\u0022”的常量,它是一个”symbol@Evan-假设这是您定义的常量?是的,我确认该常量工作正常。我希望在执行后向您展示一下情况。GhostScript似乎正在运行,但我无法读取命令提示符,因为GhostScript会自动关闭它(所以我不知道实际的错误是什么)。我的所有文件(ghostscript文件和pdf文件)都在同一个目录中(不是在C驱动器中,而是在我的桌面上)。Visual Studio没有抛出任何错误。如果你有teamviwer或任何其他远程应用程序,我很想告诉你发生了什么!谈论一个当之无愧的答案!哇!
    using System.Diagnostics;
    
    class myapp
    {
        public static void Main()
        {
            Process p1 = new Process();
            p1.StartInfo.FileName = "batch.bat";
            p1.StartInfo.Arguments = "test";
            p1.StartInfo.UseShellExecute = false;
    
            p1.Start();
            p1.WaitForExit();
         }
     }