Печать в оттенках серого в Word 2007 из C#

Я использую Visual Studio 2010 для создания шаблона Word. Я создал ленту с кнопками: печать в цвете, печать в черно-белом режиме. Я использую функцию Document.printout() для печати документа.

Как настроить принтер на печать в оттенках серого из кода?
Я не хочу использовать printDialog.

Я пытался использовать это:

PrinterSettings settings = new PrinterSettings();  
settings.DefaultPageSettings.Color = false;

Но это не работает в сочетании с Word


person wasigh    schedule 01.01.2010    source источник


Ответы (1)


Я нашел решение с DEVMODE и некоторыми pInvokes;

Режим разработки: (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);

Я использовал этот пример для создания кода

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);
}

Имя принтера можно получить с помощью:
System.Drawing.Printing.PrinterSettings.InstalledPrinters.

person wasigh    schedule 02.01.2010