gpt4 book ai didi

c# - 使用 C# 通过 Windows 服务打印 PDF

转载 作者:行者123 更新时间:2023-12-02 02:53:02 32 4
gpt4 key购买 nike

我正在使用此代码在 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();

当我设置用户运行 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();
}
}

谢谢各位的回答。

关于c# - 使用 C# 通过 Windows 服务打印 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58698734/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com