C # GhostScript - Не удалось успешно конвертировать из PDF в TXT файл - PullRequest
0 голосов
/ 15 июля 2011

Я успешно извлек текст из файла PDF с помощью GhostScript вместе со следующими аргументами командной строки:

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

При ручном запуске GhostScript через командную строку я делаю следующее: Выполните> CMD> cd C: \ (затем перейдите к вводу вышеупомянутых аргументов).

(вышеуказанная команда работает, и на моем диске C: \ появляется новый файл с именем «test.txt» с соответствующими данными в формате pdf).

Однако при попытке выполнить GhostScript через командную строку я не добился успеха.

В моем приложении C # Winform я использую следующий код для выполнения GhostScript:

Process p1 = new Process();
p1.StartInfo.FileName = @"C:\test.exe";
                    p1.StartInfo.UseShellExecute = false;

                    p1.StartInfo.WorkingDirectory = @"C:\";
                    p1.StartInfo.Arguments = " -q -dNODISPLAY -dSAFER -dDELAYBIND -dWRITESYSTEMDICT -dSIMPLE -c save -f ps2ascii.ps " + quote + @"C:\h.pdf" + quote + " -c quit >" + quote + @"C:\test.txt" + quote;
                    File.WriteAllText(@"C:\hhh.txt", p1.StartInfo.Arguments);
                    p1.Start();

Кто-нибудь видит какие-либо очевидные ошибки с моим кодом? Я был бы признателен за любую помощь, которую я могу получить здесь.

Спасибо

Evan

1 Ответ

2 голосов
/ 15 июля 2011
  1. Создайте командный файл с именем 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
    
  2. Скомпилируйте следующий код, чтобы получить консольное приложение с именем 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();
         }
     }
    
  3. Поместите все в тот же каталог, как указано ниже, и дважды щелкните myapp.exe. Готово!

enter image description here

...