Я пытаюсь распечатать файл XPS на своем чековом принтере (квитанция EPSON TM-T88IV). Я использую PrintQueue для печати документа, который читается из потока памяти. В большинстве случаев он работает хорошо, но иногда он печатает необработанное содержимое файла вместо того, каким оно должно быть.
Вот мой код для печати XPS:
public class XpsPrinterHelper
{
public bool Print(byte[] documentImage, string printerName, string tempXpsFilename = "report.xps")
{
var success = false;
var thread = new Thread(() =>
{
using (var printerQueue = GetPrintQueueFromPrinterName(printerName))
{
try
{
//save file temporary
var filename = Path.Combine(Directory.GetCurrentDirectory(), tempXpsFilename);
File.WriteAllBytes(filename, documentImage);
using (var printSystemJobInfo = printerQueue.AddJob())
{
printSystemJobInfo.JobStream.Write(documentImage, 0, documentImage.Length);
}
success = true;
}
catch (PrintJobException)
{
printerQueue.Dispose();
}
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join(); //Wait until finished
return success;
}
private static PrintQueue GetPrintQueueFromPrinterName(string printerName)
{
if (printerName.StartsWith(@"\\")) //If it is a shared printer
{
var serverPath = printerName.Substring(0, printerName.LastIndexOf('\\'));
var sharedPrinterName = printerName.Replace(serverPath, "");
var printServer = new PrintServer(serverPath.TrimEnd('\\'));
return printServer.GetPrintQueue(sharedPrinterName.Trim('\\'));
}
var localPrintServer = new LocalPrintServer();
return localPrintServer.GetPrintQueue(printerName);
}
}
Но иногда результат любит мусор
Я действительно ценю, что кто-то указал на то, что произошло, или дал мне предложение решить эту проблему.