Я хочу создать PDF-документ с правильно оформленным HTML. Это то, что я пытаюсь:QPrinter не умеет правильно оформлять HTML-страницу для рендеринга изображения в PDF-документе
QTextDocument *doc = new QTextDocument();
const char* s1 = "<html><head><style>body { font-family: sans-serif;}.note-atomic { background: rgb(242,242,242); width: 1000px; margin: 5px auto; border: 1px solid grey; border-radius: 8px;padding: 5px;}</style></head><body><div class = 'note-atomic'>Hi</div><img src = '/Users/attitude/Desktop/RnSghvV.png' width='400' height='300' /></body></html>";
doc->setHtml(QString::fromStdString(s1));
QPrinter *printer = new QPrinter();
printer->setOutputFileName("/Users/attitude/Desktop/fool.pdf");
printer->setOutputFormat(QPrinter::PdfFormat);
QPainter *painter = new QPainter();
painter->begin(printer);
doc->drawContents(painter, printer->pageRect().translated(-printer->pageRect().x(), - printer->pageRect().y()));
doc->print(printer);
const char* s2 = "<html><body><div>Bye</div></body></html>";
doc->setHtml(QString::fromStdString(s2));
printer->newPage();
doc->drawContents(painter, printer->pageRect().translated(-printer->pageRect().x(), - printer->pageRect().y()));
doc->print(printer);
painter->end();
Я ожидаю, PDF, чтобы иметь 2 страницы - первый с текстом Hi, и следующий, и последний с текстом Bye. И первая страница в стиле, как он появляется в HTML-страницы с той же разметкой:
Однако первая страница PDF приходит с содержанием полностью перепутались:
Как мне выглядеть так, как ожидалось?
Изображение Я пытаюсь в HTML документ: http://imgur.com/RnSghvV
Platform - Qt 5.3.1, 32 бит. OS X Yosemite.
Я попробовал, как вы сказали. Я получаю пустой pdf. Кстати, это должно быть 'webview-> page() -> mainFrame() -> print (printer);' ... – SexyBeast
Хм это работает, контент асинхронно, поэтому мне нужно ждать сигнала 'loadFinished' и выполните печать в слот. У меня есть еще одна небольшая проблема, независимо от того, что я пытаюсь, 'Qprinter' разбивает страницы. Как я могу гарантировать, что существует только одна длинная страница, где все содержимое сбрасывается, а не страницы, разбивающиеся после каждого интервала A4? – SexyBeast
Ничего, я исправился. Извинения, этот ответ должен был получить щедрость. Я сейчас сломался, поэтому не могу предложить больше щедрости. Когда я снова буду богат, я предлагаю этот ответ щедрую щедрость ... :) – SexyBeast