Printdocument 忽略打印机和托盘设置

Printdocument ignoring printer and tray settings

我有一项 windows 服务可以在收到请求后打印 pdf 文件。它使用 PrintDocument,但对于某些打印机,它似乎忽略了我在代码中提供的打印机和托盘设置。

目前每台打印机都有几个托盘,它们都安装为单独的队列。对于某些打印机,我只需将 PrinterName 属性(PrintDocument 的)设置为队列的名称,它就可以正常工作。然而,一些打印机似乎忽略了这一点。我也试过设置纸张来源,但这似乎总是被忽略。

这是用于打印的代码:

PrintDocument pd = new PrintDocument();
pd.PrinterSettings.PrinterName = printer; //printer is send to the service along with the request
pd.Print();

再次说明:这适用于某些打印机,但不适用于所有打印机。

我也试过这样使用 Papersource:

pd.PrinterSettings.DefaultPageSettings.PaperSource.SourceName = 
    pd.PrinterSettings.PaperSources[tray - 1].SourceName; //Tray is also send with the request

像这样:

pd.PrinterSettings.DefaultPageSettings.PaperSource = 
    pd.PrinterSettings.PaperSources[tray - 1];

我做错了什么?

编辑:pdf 文件始终包含内容,因此不能为空。

我更改了我的代码以改用 PrintQueue (https://msdn.microsoft.com/en-us/library/system.printing.printqueue(v=vs.110).aspx)。这似乎工作得很好,因为我可以直接调用队列而不是打印机。