Cai*_*nna 7 c# printing pdf windows-services
我正在使用此代码在Windows服务中使用C#在本地打印机上打印PDF文件。
Process process = new Process();
PrinterSettings printerSettings = new PrinterSettings();
if (!string.IsNullOrWhiteSpace(basePrint))
printerSettings.PrinterName = basePrint;
process.StartInfo.FileName = fileName;
process.StartInfo.Verb = "printto";
process.StartInfo.Arguments = "\"" + printerSettings.PrinterName + "\"";
process.Start();
process.WaitForInputIdle();
Run Code Online (Sandbox Code Playgroud)
当我设置用户运行Windows服务时,一切正常。
每当我在LocalSystem凭据下运行此代码时,都会出现错误“没有与该操作相关的应用程序”,这通常表示我没有准备好处理扩展名为.pdf的文件的程序。 。
我的问题是我确实有程序(Foxit Reader)来处理此操作,这一事实已得到证实,该代码可与服务上的特定用户一起使用,并且我可以通过右键单击将文件发送到打印机并选择打印选项。
在没有特定用户的情况下,是否可以更改以在服务中使用本地打印机进行打印?
我最终使用 pdfium 来完成这项工作。使用该代码,即使 Windows 服务在 LocalService 用户下运行,PDF 文件也能正确发送到打印机。
PrinterSettings printerSettings = new PrinterSettings()
{
PrinterName = printerName,
Copies = 1
};
PageSettings pageSettings = new PageSettings(printerSettings)
{
Margins = new Margins(0, 0, 0, 0)
};
foreach (PaperSize paperSize in printerSettings.PaperSizes)
{
if (paperSize.PaperName == "A4")
{
pageSettings.PaperSize = paperSize;
break;
}
}
using (PdfDocument pdfDocument = PdfDocument.Load(filePath))
{
using (PrintDocument printDocument = pdfDocument.CreatePrintDocument())
{
printDocument.PrinterSettings = printerSettings;
printDocument.DefaultPageSettings = pageSettings;
printDocument.PrintController = (PrintController) new StandardPrintController();
printDocument.Print();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你们的回答。