使用 ghostscript 将 Postscript 转换为文本文件
Convert Postscript to Text file using ghostscript
我的客户希望我完成一项任务。每当我从浏览器打印 ctrl+P
时,它会自动将该内容转到数据库 sql.
现在,让我解释一下我为实现这一目标所做的努力。通常 printerPlusPlus 是第三方工具。它添加了虚拟打印机并将文件 PS
打印到临时目录,这样我就可以读取该 post 脚本文件的内容并将其保存到数据库中。
我真正的问题是有什么东西可以将这个 post 脚本文件转换为文本或读取它们并将文本保存到数据库中?
或者有没有更好的方法来完成这个任务?
Ghostscript 是将 post 脚本转换为文本或 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 文件中。
我发现 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;
}
}
这很容易读取后记文件:)
我的客户希望我完成一项任务。每当我从浏览器打印 ctrl+P
时,它会自动将该内容转到数据库 sql.
现在,让我解释一下我为实现这一目标所做的努力。通常 printerPlusPlus 是第三方工具。它添加了虚拟打印机并将文件 PS
打印到临时目录,这样我就可以读取该 post 脚本文件的内容并将其保存到数据库中。
我真正的问题是有什么东西可以将这个 post 脚本文件转换为文本或读取它们并将文本保存到数据库中? 或者有没有更好的方法来完成这个任务?
Ghostscript 是将 post 脚本转换为文本或 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 文件中。
我发现 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;
}
}
这很容易读取后记文件:)