0
GhostScript.NET을 사용하여 PDF 문서를 인쇄하는 기능이 있습니다. 한 사용자가 인쇄하려고하면 모든 것이 올바르게 작동하지만 여러 사용자가 동시에 인쇄하려고하면 모든 문서가 인쇄되지 않습니다. 다중 동시 인쇄를 달성하기 위해 고스트 스크립트의 인스턴스를 여러 개 만들 계획입니다. 사용자의병렬 루프가있는 GhostScript의 여러 인스턴스를 사용하여 인쇄하려고합니다.
Ghostscript.NET Multithreading Issue
하나는 병렬 forloop를 만들라고,하지만 난 솔직히 고스트 스크립트의 인스턴스의 정확한 양을 생성하도록 하나를 구성하는 방법을 잘 모르겠어요 : 나는이 질문에 건너왔다. 어떤 도움을 크게 감상 할 수
public static void PrintFormPdfData(byte[] formPdfData, string printer)
{
var filename = @"C:\TEMP\report.pdf";
using (var file = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
{
file.Write(formPdfData, 0, formPdfData.Length);
using (GhostscriptProcessor processor = new GhostscriptProcessor())
{
List<string> switches = new List<string>();
switches.Add("-empty");
switches.Add("-dPrinted=false");
switches.Add("-dBATCH");
switches.Add("-dPDFFitPage");
switches.Add("-dNOPAUSE");
switches.Add("-dNOSAFER");
switches.Add("-dNumRenderingThreads=3");
switches.Add("-dNumCopies=1");
switches.Add("-sDEVICE=mswinpr2");
switches.Add("-sOutputFile=%printer%" + printer);
switches.Add(filename);
try
{
processor.StartProcessing(switches.ToArray(), null);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
File.Delete(filename);
}
}
}
}
:
나는 주요 기능을 가지고있다. 코드의 문제는 당신이를 사용하고public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies)
{
Parallel.ForEach(printQueue, (currentFile) =>
{
currentFile = printQueue.Dequeue();
PrintFormPdfData(currentFile, printer, copies);
});
}
private static void PrintFormPdfData(byte[] pdfFormBytes, string printer, int copies)
{
var fileName = Path.GetTempFileName();
using (var file = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
{
file.Write(pdfFormBytes, 0, pdfFormBytes.Length);
using (GhostscriptProcessor processor = new GhostscriptProcessor())
{
List<string> switches = new List<string>();
switches.Add("-empty");
switches.Add("-dPrinted");
switches.Add("-dBATCH");
switches.Add("-dPDFFitPage");
switches.Add("-dNOPAUSE");
switches.Add("-dNOSAFER");
switches.Add("-dNumRenderingThreads=3");
switches.Add("-dNumCopies=1");
switches.Add("-sOutputFile=%printer%" + printer);
switches.Add("-sDEVICE=mswinpr2");
switches.Add(fileName);
try
{
processor.StartProcessing(switches.ToArray(), null);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
file.Close();
}
File.Delete(fileName);
}
}
입니다 : – VMAtm
예. – Crumblenautjs