我正在使用Visual Studio 2010来创建Word模板。我创建了一个带按钮的功能区:彩色打印,B& W打印。我使用Document.printout()函数来打印文档。
如何从代码中将打印机设置为灰度打印?
我不想使用printDialog。
我试着用这个:
PrinterSettings settings = new PrinterSettings();
settings.DefaultPageSettings.Color = false;
但这不能与Word结合使用
答案 0 :(得分:0)
我找到了DEVMODE和一些pInvokes的解决方案;
Devmode:(http://msdn.microsoft.com/en-us/library/aa927408.aspx) 此结构包含有关打印机环境和设备初始化的信息。
它包含一个字段:dmColor(短)将此值设置为1表示灰度/单色,将此值设置为2表示颜色。更改此设置会直接影响打印机并覆盖用户设置。
[DllImport(“winspool.drv”,CharSet = CharSet.Ansi,SetLastError = true)]
private static extern bool SetPrinter(IntPtr hPrinter,int Level,IntPtr pPrinter,int command);
I used this example to create my code
public bool setPrinterToGrayScale(string printerName)
{
short monochroom = 1;
dm = this.GetPrinterSettings(printerName);
dm.dmColor = monochroom;
Marshal.StructureToPtr(dm, yDevModeData, true);
pinfo.pDevMode = yDevModeData;
pinfo.pSecurityDescriptor = IntPtr.Zero;
Marshal.StructureToPtr(pinfo, ptrPrinterInfo, true);
lastError = Marshal.GetLastWin32Error();
nRet = Convert.ToInt16(SetPrinter(hPrinter, 2, ptrPrinterInfo, 0));
if (nRet == 0)
{
//Unable to set shared printer settings.
lastError = Marshal.GetLastWin32Error();
//string myErrMsg = GetErrorMessage(lastError);
throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
}
if (hPrinter != IntPtr.Zero)
ClosePrinter(hPrinter);
return Convert.ToBoolean(nRet);
}
可以通过以下方式检索PrinterName:
System.Drawing.Printing.PrinterSettings.InstalledPrinters