Как использовать QPainter для доступа к макету в html?
пример макета html для печати:
QString address= "Example address";
QString html_layout_print;
html_layout_print = "<div align="center">Layout html for print</div>"
"<div align="center">"+address+"</div>";
QPainter // << get html to print
У меня возникли проблемы с созданием макета для печати с помощью команды painter.drawText().
Код:
QPrinter printer(QPrinter::HighResolution);
printer.setPageMargins(5,5,5,5,QPrinter::Millimeter);
QPainter painter(&printer);
painter.drawText(10, 10, QString("Header %1").arg("Header example"));
Новый код, QTextDocument:
QString text_x = "Hello World!";
QTextDocument *doc = new QTextDocument(this);
doc->setUndoRedoEnabled(false);
doc->setHtml("<p><span style=\"color:#000000; font-weight:600\">"+text_x+"</span></p>");
doc->setTextWidth(width());
doc->setUseDesignMetrics(true);
doc->setDefaultTextOption(QTextOption(Qt::AlignHCenter));
QPainter *p = new QPainter(this);
p->setRenderHint(QPainter::Antialiasing, true);
doc->drawContents(p);
p->end();
Возвращение erro:
QPainter::pen: Painter not active
QPainter::setPen: Painter not active
QPainter::pen: Painter not active
QPainter::setPen: Painter not active
QPainter::setPen: Painter not active
QPainter::setPen: Painter not active
QPainter::restore: Unbalanced save/restore
QPainter::end: Painter not active, aborted
Если вам нужна более сложная печать в формате HTML, вам необходимо изучить классы QWebKit. Создайте объект QWebPage, поставьте свой HTML-код и используйте вызов mainFrame() → render() с вашим художником. Это даст вам изображение, которое можно распечатать.
Если вам не нужен только образ, но только чистая печать, альтернативой является вызов mainFrame() → print().
QWebView *view = new QWebView(this); view->page()->mainFrame()->load(QUrl("http://www.google.com")); QPrinter printer; QPainter painter(&printer); view->page()->mainFrame()->render(&painter); painter.end();