获取用户选择的打印作业系统的打印颜色。打印

问题描述 投票:0回答:1
我正在开发一个自动打印应用程序,我想在其中获取用户打印的打印作业的选定打印颜色。

问题是,如果我从打印对话框中选择黑白打印,它总是返回彩色打印。

enter image description here

我尝试过

OutputColor

PrintTicket
 中的 
PrintCapabilities
,但无论我从打印对话框中选择
黑白,两者都会返回彩色打印

这是我的代码,我如何从中获取它

PrintSystemJobInfo

Form1 f = form as Form1; PrintSystemJobInfo job = e.JobInfo; if (job == null) return; f.UpdatePrintInfoList(job, e); if (job.IsSpooling) { job.Pause(); pausedJobs.Add(new PausedJob(e.JobID)); } else if (job.IsPaused) { PrintQueue pq = job.HostingPrintQueue; pq.Refresh(); PrintJobSettings pjs = pq.CurrentJobSettings; PrintTicket pt = pq.UserPrintTicket; PrintCapabilities pc = pq.GetPrintCapabilities(); string outputColor = string.Empty; if (pc.OutputColorCapability.Contains(OutputColor.Color)) { outputColor = "Color"; } else if (pc.OutputColorCapability.Contains(OutputColor.Grayscale)) { outputColor = "Grayscale"; } else if (pc.OutputColorCapability.Contains(OutputColor.Monochrome)) { outputColor = "Monochrome"; } else { outputColor = "Unknown"; } PrinterSettings ps = new(); ps.PrinterName = printer; string jobDetails = string.Format( "Job Status: {0}\n" + "Printer: {1}\n" + "No. of Pages: {2}\n" + "Output Color (PrintTicket): {3}\n" + "Output Color (PrintCapabilities): {4}\n" + "\nWould you like to continue printing?", "Paused", printer, job.NumberOfPages, pt.OutputColor, outputColor); }
    
c# printing system.printing print-job-control
1个回答
0
投票
屏幕截图来自 Chrome 内置的打印管理。它对 Windows 打印驱动程序不可见,Windows 打印驱动程序甚至可能会覆盖选择并仍然强制黑白。

Chrome 正在将彩色或黑白数据渲染到 Windows 打印驱动程序。 Windows 打印驱动程序通常采用以下三种模式之一:

    自动。此选项尝试(!)根据渲染的数据或文档检测彩色或黑色,以确定黑白或彩色,并且此信息可用于打印机选择墨粉,也可用于管理软件的记帐(和计费)。
  1. 颜色。此选项始终渲染颜色。但它似乎仍然有效,因为 Chrome 已经将颜色预过滤为灰度。
  2. 黑白/灰度。此选项仅打印黑白,并且可能会导致您的文档打印为黑白,即使您在 Chrome 中都有一种颜色并选择了颜色。
如果您想以与 C# 代码相同的方式查看选项,则需要单击小

Print using system dialog...

 链接。

© www.soinside.com 2019 - 2024. All rights reserved.