Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/55: Рейтинг темы: голосов - 55, средняя оценка - 4.95
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
1

Сохранение в .pdf

28.04.2014, 12:38. Показов 10255. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

сохраняю в pdf, сформированный html
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
QString Result::createHTML()
{
    QTextStream html;
    QString s;
    html.setString(&s, QIODevice::ReadWrite);
    html << "<html>\n";
    html << "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n";
    html << "<bode>\n";
 
    html << QString::fromLocal8Bit("<h1>Протокол проведения измерений № _____ </h1>");
    html << QString::fromLocal8Bit("Дата и время _____________________ <br><br>");
    html << QString::fromLocal8Bit("<h3>Результаты контроля:</h3>");
    html << QString::fromLocal8Bit("Среднеквадратическое отклонение (") +QChar(963) +QString::fromLocal8Bit("): ")<<RmsVal<<QString::fromLocal8Bit("мкм")<<"<br>";
 
    savePicturePlot();
 
    html << "<p>";
    html << "<img src="<<PATH_PLOT_IMG<<" width=\"600\">";
    html << "</p>\n<br>";
 
    //создание таблицы
    html << "<table border=1 width: 100%>\n";
    //шапка таблицы
        html << "<tr>\n";
            html << QString::fromLocal8Bit("<th>X, мм</th>\n");
            html << QString::fromLocal8Bit("<th>Z, </th>\n";
            html << QString::fromLocal8Bit("<th>Тп, мкм</th>\n");
         html << "</tr>\n";
    for (int i = 0; i < tableResult -> rowCount(); i++){
        html << "<tr>\n";
        for (int j = 0; j < tableResult -> columnCount(); j++){
            html << "<td>";
            html << tableResult -> item(i,j) -> text();
            html << "</td>";
        }
        html << "</tr>\n";
    }
 
    html << "</table>\n</bode>\n</html>\n";
 
    return s;
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void Result::SaveAs()
{
    WCHAR MyDocumentPath[255];
    SHGetFolderPath(NULL,CSIDL_PERSONAL,NULL,0,MyDocumentPath);
    QString PATH_DOCUMENTS = QString::fromStdWString (MyDocumentPath);
 
    fileName = QFileDialog::getSaveFileName(this,QObject::tr("Сохранить файл"),PATH_DOCUMENTS,QObject::tr("PDF (*.pdf);;Word files (*.doc);;Exel files (*.xls)"));
 
    if(fileName != ""){
        printHtmlView = new QWebView;
        connect(printHtmlView, SIGNAL(loadFinished(bool)), this, SLOT(htmlRender(bool)));
        printHtmlView->setHtml(createHTML());
 
        delete printHtmlView;
    }
}
 
void Result::htmlRender(bool f_)
{
    qDebug()<<"~htmlRender: "<<f_;
 
    QPrinter printer;
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(fileName); 
    printHtmlView->print(&printer);
    //printHtmlView->show(); 
}
при выводе на печать на принтер график печатается там, где надо, при сохранении в файл pdf - графика нет, и вылезают предупреждения:

QNetworkAccessFileBackendFactory: URL has no schema set, use file:// for files
QNetworkReplyImplPrivate::error: Internal problem, this method must only be called once.


причем сначала у меня пару раз сохранился файл вместе с картинкой, а в какой-то момент картинка перестала сохранятся ((

чего не так??
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2014, 12:38
Ответы с готовыми решениями:

Сохранение в pdf
Нужно по клику чтобы сохраняла pdf в место которое выбрал.Как это сделать?

Phpexcel сохранение в pdf
Всем доброго времени суток! Есть достаточно простой вопрос, но не могу сообразить, как...

Сохранение с расширением pdf
Фотошоп CS2. Все слои объединены в один, режим CMYK, необходимо сохранить с расширением PDF для...

Сохранение отчета в PDF
Здравствуйте. Подскажите что делать.Есть бд на 2 компах. На них разное разрешение экрана. В отчете...

11
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
28.04.2014, 13:07 2
По моему достаточно:
C++ (Qt)
1
2
3
4
5
6
7
printHtmlView = new QWebView;
...
printHtmlView->setHtml(createHTML());
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(fileName); 
printHtmlView->print(&printer);
Никакие сигналы/слоты тут не нужны.
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
28.04.2014, 17:12  [ТС] 3
но вот судя по этой статье - может возникнуть такая ситуация:
метод print вызывается сразу после setHtml - это не верно, ничто не гарантирует что в момент вызова print, html будет полностью загружен в QWebView.
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
28.04.2014, 17:15 4
Какой статьи?

Я так делал ни раз в том числе и с многостраничными документами. Никаких проблем ни разу не было.
Вы же не из инета качаете, а из локалки.
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
28.04.2014, 17:30  [ТС] 5
вот тут почитала я : http://degitx.blogspot.ru/2012/04/qtc-pdf.html

Добавлено через 6 минут
то же самое - если без сигналов слотов делать
если комментить строки 17-19 в ф-ии createHTML() - ошибок не вылезает

проблема в добавлении картинки - не пойму в чем беда
путь до картинки получается такой C:\Users\Admin\Documents\plot.jpg
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
28.04.2014, 17:40 6
Так у вас изображений нет или ошибки отрисовки? Картинки - это другое же.
Их нужно грузить так:
background:url(qrc:/img.png) - если из ресурсов
background:url(file:///C:/Users/Admin/Documents/plot.jpg) - если из файла
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
28.04.2014, 17:42  [ТС] 7
вылезают ошибки :
QNetworkAccessFileBackendFactory: URL has no schema set, use file:// for files
QNetworkReplyImplPrivate::error: Internal problem, this method must only be called once.

ну и картинки вообще нет в сохраненном файле


не поняла немного...мне вместо такого - html << "<img src="<<PATH_PLOT_IMG<<" width=\"600\">";
такое нужно :background:url(file:///C:/Users/Admin/Documents/plot.jpg) ???
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
28.04.2014, 17:48 8
"URL has no schema set, use file:// for files"
Ну так гуглопереводчик же...
Говорит что нужно 2-а слеша, а не три.

Ну я привел пример в качестве фона элемента.
У вас ошибка в самом пути, как я понимаю. Я же не вижу ваш файл и что вы хотите сделать.
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
29.04.2014, 14:15  [ТС] 9
вообще мне нужно, чтоб получилось такое:

текст
текст
какой-то текст
график
таблица

я формирую html, и когда на принтер вывожу, то все ок, а в pdf нет графика

Добавлено через 20 часов 26 минут
как правильно путь указать при создании html строки, чтобы потом из нее можно было сформировать pdf??
вот я так пишу
html << "<img src=\"C:/Users/Admin/Documents/plot.jpg\" width=\"600\">";
картинки нет
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
29.04.2014, 14:36 10
C++ (Qt)
1
html << "<img src=\"file://C:/Users/Admin/Documents/plot.jpg\" width=\"600\">";
Насколько я помню у Qt есть баг с загрузкой ресурсов. То есть он не успевает загрузить картинки и уже печатает.
Обычно это решается хранением картинки в ресурсах или предпросмотром.
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
30.04.2014, 10:34  [ТС] 11
убрала строчку delete printHtmlView;
предупреждение QNetworkAccessFileBackendFactory: URL has no schema set, use file:// for files
осталось, но PDF с картинкой создается

есть еще одна проблемка:
я сохраняю график с формы а потом его в этот pdf пихаю:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
wdgPlot->setBackgroundRole(QPalette::Light);
    wdgPlot->update();
 
    myPlot->setBackgroundRole(QPalette::Light);
    myPlot->replot();
 
    QPixmap picture(wdgPlot->width(),wdgPlot->height());
    QPainter painter;
    painter.begin(&picture);
 
    wdgPlot->render(&painter);
 
    wdgPlot->setBackgroundRole(QPalette::NoRole);
    wdgPlot->update();
    myPlot->setBackgroundRole(QPalette::NoRole);
    myPlot->replot();
 
    painter.end();
фон под графиком белый, а вот на осях остался серым


Сохранение в .pdf
0
5 / 5 / 1
Регистрация: 27.11.2009
Сообщений: 232
30.04.2014, 10:58  [ТС] 12
C++ (Qt)
1
2
3
wdgPlot -> setStyleSheet("QWidget{"
                             "background: white;"
                             "}");
0
30.04.2014, 10:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2014, 10:58
Помогаю со студенческими работами здесь

Сохранение Excel в PDF
Есть скрипт который выполняется после нажатии кнопки генерировать или по шедулеру в определённое...

Сохранение вебстраницы в PDF
Всем доброго здоровичка!!! Такая задача: На форме кнопка и ТБ. В текстбокс вводится адрес...

Сохранение отчета в PDF
Всем привет. Есть печать отчета, на основании выборки по КодОтпрвки. DoCmd.OpenReport...

Сохранение файла Экселя в PDF
Добрый день. Помогите, пожалуйста, со скриптом для экселевского файла. Нужно при каждом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru