我已将 GhostScript.NET 添加到我的应用程序中,并且能够在本地计算机上使用 GSPrint 成功打印 PDF。不幸的是,在将更新的应用程序部署到服务器以及安装 GSView(包括 GSPrint)之后,打印功能只是挂起而没有任何错误。
我的第一个猜测是,由于我正在写入文件系统以便 GSPrint 打印文件,因此它与访问安全权限有关。我在 Windows Server 2012 上使用 IIS 8。如果有人对部署 GSPrint 或如何解决此问题有任何经验,我将不胜感激。
这是代码:
public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies)
{
Parallel.ForEach(printQueue, (currentFile) =>
{
PrintWithGSPrint(currentFile, printer, copies);
});
printQueue.Clear();
}
private static void PrintWithGSPrint(byte[] pdfFormBytes, string printer, int copies)
{
try
{
var fileName = Path.GetTempFileName();
using (var file = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
{
file.Write(pdfFormBytes, 0, pdfFormBytes.Length);
//this uses GSPrint, which console commands are different from vanilla ghostscript.
var gsArguments = $"-noquery -portrait -printer\"{printer}\" \"{fileName}\"";
var gsLocation = @"C:\Program Files\Ghostgum\gsview\gsprint.exe";
var gsProcessInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = gsLocation,
Arguments = gsArguments
};
var gsProcess = Process.Start(gsProcessInfo);
gsProcess.WaitForExit();
file.Close();
}
File.Delete(fileName);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}