Я пытаюсь определить текущий тип бумаги на принтере по умолчанию, используя С#.
Я определил принтер по умолчанию, используя WMI и перечислив через коллекцию Properties, я вижу там свойство строки CurrentPaperType, но на обоих принтерах в офисе его значение устанавливается в пустую строку.
Документация MSDN начинает разворачиваться о принтерах, реализующих этот стандартный бла-бла, но очень мало на пути практических советов: -
Тип бумаги, используемой принтером. Должен быть выражен в форме, указанной в заявке на печать документов ISO/IEC 10175 (DPA), которая суммирована в Приложении C RFC 1759 (Printer MIB). Это свойство наследуется от CIM_Printer.
Я могу получить список всех типов бумаги, которые поддерживает выбранный принтер, но он не говорит мне, на какой из них он установлен.
Я создаю динамический отчет в памяти, а затем выплевываю его на принтер одним ударом, поэтому мне нужно знать размер бумаги, чтобы правильно устанавливать поля, ширину столбцов и т.д.
Кто-нибудь успел получить эту информацию?
Не используйте WMI, если вам это действительно нужно. Используйте встроенные классы .Net, такие как Foxfire. Вы можете получить принтер, используя следующее:
System.Drawing.Printing.PrinterSettings printer = new System.Drawing.Printing.PrinterSettings();
printer.PrinterName = "YourPrinterName";
Затем вы можете получить доступ ко всем требуемым свойствам через:
printer.DefaultPageSettings;
Есть ли какая-то конкретная причина, по которой вы используете WMI вместо классов .Net-принтера в System.Drawing.Printing?
Вы можете легко получить свою информацию через свойство PaperSources класса PrinterSettings, которое содержит все имеющиеся в принтере PaperKinds (может быть несколько, поскольку у нескольких принтеров есть несколько лотков)