使用C#通过Windows服务进行PDF打印

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)来处理此操作,这一事实已得到证实,该代码可与服务上的特定用户一起使用,并且我可以通过右键单击将文件发送到打印机并选择打印选项。

在没有特定用户的情况下,是否可以更改以在服务中使用本地打印机进行打印?

Cai*_*nna 4

我最终使用 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)

谢谢你们的回答。