2016-01-02 1 views
2

Мой клиент хочет, чтобы я выполнил одну задачу. который когда я печатаю ctrl+P из браузера, он автоматически отправит это содержимое в базу данных, которая является sql.Преобразование Postscript в текстовый файл с использованием ghostscript

Теперь, позвольте мне объяснить, что я пытался достичь этого. Обычно printerPlusPlus является сторонним инструментом. Что добавляет виртуальный принтер и печатает файлы PS в каталог temp, чем я могу прочитать содержимое этого файла postscript и сохранить его в базе данных.

Мой настоящий вопрос - есть ли что-нибудь, из чего я могу преобразовать эти файлы сценариев сообщения в текст или прочитать их и сохранить тексты в базе данных? Или есть ли лучший способ достичь этой задачи?

Ghostscript - это альтернативная и дополнительная функция для преобразования постскриптов в текст или PDF. Но я совершенно не понимаю, что делать с документами и как их выполнять.

_viewer.Interpreter.RunFile("C:\\PrinterPlusPlus\\Temp\\ankit_SONY-VAIO_sony_20151227_185020_3.ps"); 

      GhostscriptPngDevice dev = new GhostscriptPngDevice(GhostscriptPngDeviceType.Png16m); 
      dev.GraphicsAlphaBits = GhostscriptImageDeviceAlphaBits.V_4; 
      dev.TextAlphaBits = GhostscriptImageDeviceAlphaBits.V_4; 
      dev.ResolutionXY = new GhostscriptImageDeviceResolution(96, 96); 
      dev.InputFiles.Add(@"C:\\PrinterPlusPlus\\Temp\\ankit_SONY-VAIO_sony_20151227_185020_3.ps"); 
      dev.OutputPath = @"C:\\PrinterPlusPlus\\Temp\\ankit_SONY-VAIO_sony_20151227_185020_3.txt"; 
      dev.Process(); 

      _preview.Activate(); 

Я пробовал это, но это, похоже, не работает и добавляет текст ASCII в файл txt.

ответ

1

Я нашел ghostscript как запутанный. но сначала я нашел решение от here

string inputFile = @"E:\gss_test\test_postscript.ps"; 
    GhostscriptPipedOutput gsPipedOutput = new GhostscriptPipedOutput(); 

    // pipe handle format: %handle%hexvalue 
    string outputPipeHandle = "%handle%" + int.Parse(gsPipedOutput.ClientHandle).ToString("X2"); 

    using (GhostscriptProcessor processor = new GhostscriptProcessor()) 
    { 
     List<string> switches = new List<string>(); 
     switches.Add("-empty"); 
     switches.Add("-dQUIET"); 
     switches.Add("-dSAFER"); 
     switches.Add("-dBATCH"); 
     switches.Add("-dNOPAUSE"); 
     switches.Add("-dNOPROMPT"); 
     switches.Add("-sDEVICE=pdfwrite"); 
     switches.Add("-o" + outputPipeHandle); 
     switches.Add("-q"); 
     switches.Add("-f"); 
     switches.Add(inputFile); 

     try 
     { 
      processor.StartProcessing(switches.ToArray(), null); 

      byte[] rawDocumentData = gsPipedOutput.Data; 

      //if (writeToDatabase) 
      //{ 
      // Database.ExecSP("add_document", rawDocumentData); 
      //} 
      //else if (writeToDisk) 
      //{ 
      // File.WriteAllBytes(@"E:\gss_test\output\test_piped_output.pdf", rawDocumentData); 
      //} 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      gsPipedOutput.Dispose(); 
      gsPipedOutput = null; 
     } 
    } 

Это читает приписку файлов легко :)

+0

Как мы читаем этот PDF-файл в # линии C по линии? – Sivajith

+0

@Sivajith, пожалуйста, проверьте это https://stackoverflow.com/questions/25424816/how-to-read-a-pdf-file-line-by-line-in-c –