Qt/C++. Экспорт в pdf - это легко.

Вам нужно экспортировать данные в pdf из вашей программы? На первый взгляд довольно трудная задача, но на наше счастье Qt предоставляет набор всех нужных инструментов, и, в частности, QPrinter который позволяет сделать желаемое явью. Рассмотрим создание объекта класса с самого начала.

QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(pdfPath); // устанавливаем путь к pdf файлу

// работаем с отрисовкой pdf через QPainter
QPainter p(&printer);
// выполняем действия с p
p.end();
Довольно легко не правда ли? Но работа с QPainter не из самых приятных, поэтому рассмотрим более привлекательный вариант, а именно сохранение отрендеренного html в pdf. Для этого нам потребуется модуль WebKit Qt, и класс QWebView.
// ?.h
// QWebView* printHtmlView;
void htmlGen()
{
   printHtmlView = new QWebView;
   connect(printHtmlView, SIGNAL(loadFinished(bool)), this, SLOT(htmlRender()));

   printHtmlView->setHtml(html); // загружаем ваш html.
}

// slot: htmlRender()
// слот вызывается сразу после полной загрузки веб-страницы
void htmlRender()
{
   QPrinter printer;
   printer.setOutputFormat(QPrinter::PdfFormat);
   printer.setOutputFileName(pdfPath); // устанавливаем путь к pdf файлу
   printHtmlView->print(&printer);
   //printHtmlView->show(); // хотим ли мы посмотреть что вышло?
}

Вот и все. Стоит в конце подметить что в интернете была целая куча примеров где метод print вызывается сразу после setHtml - это не верно, ничто не гарантирует что в момент вызова print, html будет полностью загружен в QWebView. Что бы решить этот нюанс, мы, собственно, и прицепили слот.

Комментарии

  1. QTextDocument тоже умеет работать с классом принтера и его можно использовать для простого и удобного сохранения содержимого в pdf ^^

    QTextDocument document;
    document.setHtml( html );

    QPrinter printer;
    printer.setOutputFormat( QPrinter::PdfFormat );
    printer.setOutputFileName( pdfPath ); // устанавливаем путь к pdf файлу
    document->print( &printer );

    Qt 4.8.0

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Работа с mkvmerge, или как добавить звуковые дорожки в видео.

Старт