Печат в нива на сивото в Word 2007 от C#

Използвам Visual Studio 2010, за да създам Word Template. Създадох лента с бутони: цветен печат, черно-бял печат. Използвам функцията Document.printout(), за да отпечатам документа.

Как мога да настроя принтера да печата в скала на сивото от код?
Не искам да използвам printDialog.

Опитах се да използвам това:

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

Но това не работи в комбинация с Word


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


Отговори (1)


Намерих решение с 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 команда);

Използвах този пример, за да създам своя код

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

person wasigh    schedule 02.01.2010