2016-01-02 88 views
2

我的客戶希望我執行一項任務。這是每當我從瀏覽器打印ctrl+P它會自動去那個數據庫是sql的內容。使用ghostscript將Postscript轉換爲文本文件

現在,讓我解釋一下我試圖做到這一點。通常是第三方工具printerPlusPlus。其中添加了虛擬打印機,並將文件PS打印到臨時目錄,而不是我可以讀取該postscript文件的內容並將其保存到數據庫。

我真正的問題是有什麼我可以將這篇文章腳本文件轉換爲文本或讀取它們並將文本保存到數據庫? 或者有沒有更好的方法來完成這項任務?

Ghostscript是替代和ow-some功能將後記轉換爲文本或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(); 

我試過這個,但是這似乎不起作用,並且向txt文件添加ASCII文本。

回答

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; 
     } 
    } 

這很容易讀取PostScript文件:)

+0

我們如何讀取線在C#線此​​PDF文件的解決方案? – Sivajith

+0

@Sivajith請檢查此https://stackoverflow.com/questions/25424816/how-to-read-a-pdf-file-line-by-line-in-c –

相關問題