PrintCapabilities printCapabilites = SelectedPrinter.GetPrintCapabilities ();
IEnumerable pagesizeList = printCapabilites.PageMediaSizeCapability;
Приведенный выше код не перечисляет все размеры страниц, поддерживаемые драйвером принтера, и это моя проблема.
В качестве примера, если вы используете драйвер принтера Microsoft XPS, вы обнаружите, что PagesizeList (выше) будет пропускать некоторые размеры страниц. «Letter Small» - это один из отсутствующих размеров страницы (хотя MS Word будет успешно отображать этот размер страницы).
В качестве быстрой проверки я сбросил возможности принтера в xml, как показано ниже:
long gpCLen = _selectedPrinter.GetPrintCapabilitiesAsXml().Length;
FileStream fs = File.OpenWrite(@"c:\test.txt");
MemoryStream ms = _selectedPrinter.GetPrintCapabilitiesAsXml();
byte[] b = new byte[gpCLen];
ms.Read(b, 0, (int)gpCLen);
fs.Write(b, 0, (int)gpCLen);
fs.Close();
Узел PageMediaSize в созданном xml-файле действительно имеет все размеры страниц И ИМЕЮЩИЕ недостающие.
Кажется, что отображаемые страницы имеют свое имя start psk:
<psf:Option name="psk:ISOA4" constrained="psk:None">
но на нераспечатанных страницах, похоже, есть:
<psf:Option name="ns0000:LETTERSMALL" constrained="psk:None">
Нераспечатанные страницы драйвера принтера Epson похожи:
<psf:Option name="epns200:IndexCard5x8" constrained="psk:None">
По сути, страница, имя которой начинается с «psk» PageMediaSizeCapability, но если она изготовлена по индивидуальному заказу, например epns200, ns0000, ее нет в списке. Есть идеи, почему и как это исправить, пожалуйста? Узлы / страницы есть, но PageMediaSizeCapability это не нравится!
Заранее спасибо
EDIT:
Как указано в MS, «объект PrintCapabilities является простым в работе представлением определенного типа XML-документа, называемого документом PrintCapabilities». Но документ содержит больше информации, чем объект Полное описание