使用Ghostscript将Postscript转换为文本文件

5
我的客户要求我完成一个任务,即每当我在浏览器中按下 ctrl+P 时,它会自动将内容发送到数据库中,该数据库为 SQL。
现在,让我解释一下我尝试实现这个任务的方法。通常情况下,使用第三方工具 PrinterPlusPlus,它添加虚拟打印机并将文件 PS 打印到临时目录,然后我可以读取该后置脚本文件的内容并将其保存到数据库中。
我的真正问题是有没有什么方法可以将这些后置脚本文件转换为文本或读取它们并将文本保存到数据库中?或者是否有更好的方法来完成此任务?
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();

我尝试了这个方法,但似乎它不起作用,它只是在txt文件中添加了ASCII文本。
1个回答

3

我发现ghostscript有点难懂。但是,我从这里找到了解决方案。

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

这可以轻松地读取后置文件 :)

1
@Sivajith 请查看此链接 https://dev59.com/TILba4cB1Zd3GeqPh7B7 - Just code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接