win32, winspool, Печать с заданными размерами страницы

Что хочу: На термопринтере Datamax (Zebra), необходимо напечатать изображение, посредством Winspool. Этикетка имеет размер, отличный от установленного по умолчанию в Настройках печати. В перспективе, этикетка может менять размер (Высоту х Ширину).

Как это делаю я:

1 Создаю форму с нужными мне размерами:

            FORM_INFO_1A fm;
            fm.pName = (LPSTR)"Barcoders";
            fm.Flags = FORM_USER;
            fm.Size.cx = 1480;
            fm.Size.cy = 2100;
            fm.ImageableArea.left = 0;
            fm.ImageableArea.right = 1480;
            fm.ImageableArea.top = 0;
            fm.ImageableArea.bottom = 2100;

2 Получаю Contex Device принтера:

            //Не важно какой принтер я выбираю, результат одинаковый
            prn = CreateDC(NULL, TEXT("HP"), NULL, NULL);

3 Указываю принтеру свою форму:

            SetForm(&prn, fm.pName, 1, (LPBYTE)&fm);

Далее формируется документ (StartDoc из DOCINFO) и в конце удаляется Device Contex принтера (DeleteDC).

Что получаю: Не зависимо от моих манипуляций с FORM_INFO, страница свой размер не уменьшает. Пытался в шаге №3 указывать стандартные формы, А5, А6 - результатов это не дало, все страницы выглядят одинаково. Ошибок выполнения нет.

В чем моя ошибка реализации? В официальных исходниках от Microsoft было написано что SetForm можно использовать только от админа (запускал от админа, результат тот же), насколько это актуальная информация?

Каким еще способом можно осуществить печать на принтер со своими размерами страницы, на C++.


Ответы (0 шт):