Russian Qt Forum

Qt => Общие вопросы => Тема начата: patison от Июль 31, 2013, 01:23



Название: Печать HTML (подгонка под размеры листа)
Отправлено: patison от Июль 31, 2013, 01:23
Есть проблема с печатью HTML. Использую QTextDocument для печати. Т.е. код примерно выглядит так:
Код:
QTextDocument doc;
doc.setHtml(sHtml);

QPrinter printer;
printer.setPrinterName(sPrinterName);
printer.setFullPage(true);

QPrintDialog dialog(&printer, this);
doc.print(&printer);

Данные уходят на печать, но принтер на котором печатается - не всегда обычный А4 принтер, иногда это может быть принтер с чеками. Проблема в том что контент (в случае с чековым принтером) постоянно вылазит за пределы видимости, так-же по краям огромные отступы (printer.setPageMargins(1,1,1,1,QPrinter::Millimeter) пробовал, не помогает).
Пробовал сторонние решения (отдельные утилиты для отправки на печать из консоли) - там все прекрасно.

Подскажите - как заставить печататься данные так что-бы они полностью заполнялил лист, и не вылезали за его пределы?

Заранее спасибо!


Название: Re: Печать HTML (подгонка под размеры листа)
Отправлено: torwig от Июль 31, 2013, 08:33
Код:
 
    printer.setPaperSize(QSizeF(ширина_чека, высота_чека), QPrinter::Millimeter);
    printer.setPageMargins(2, 5, 2, 2, QPrinter::Millimeter);
    QSizeF paperSize;
    paperSize.setWidth(printer.width());
    paperSize.setHeight(printer.height());
    textDocument.setPageSize(paperSize);
    textDocument.setDocumentMargin(0);

Как-то так, должно работать.


Название: Re: Печать HTML (подгонка под размеры листа)
Отправлено: patison от Июль 31, 2013, 18:22
Спасибо за ответ.
Мне крайне не понятно по какому принципу задается высота чека. Ведь его фактическая высота зависит от кол-ва контента. А в самом принтере лежит рулон бумаки, на который печатается контент.
Ну да ладно, это не так уж и важно. Примечательно то, что использовав ваш пример - контент по прежнему вылазит за пределы видимости, и все так-же огромный отступ слева (http://d.pr/i/m7sP). Такое ощущение что некоторые настройки задаваемые в приложении просто напросто игнорируются.


Огромное спасибо! Ваше решение подошло :)