Russian Qt Forum

Qt => Печать => Тема начата: beginner от Январь 24, 2006, 02:03



Название: Отчеты
Отправлено: beginner от Январь 24, 2006, 02:03
Каким лучше образом генерировать отчеты из под Qt? Нужно ли влоб забивать текстом файлик и получать из него то, что нужно (например html) или же есть более удобные способы создания отчетов, например какая-нибудь интеграция с OpenOffice?


Название: Отчеты
Отправлено: LestorN от Январь 24, 2006, 07:59
Я сделал отчёты пользуясь QTextDocument. Без графиков, но таблички вполне прилично получаются, а в QT4.1 можно выгружать в PDF так что всё в ажуре!


Название: Отчеты
Отправлено: yshurik от Январь 24, 2006, 13:44
А можно про "выгружать в PDF" по-подробнее пожалуста? Что тут имеется ввиду?


Название: Отчеты
Отправлено: LestorN от Январь 24, 2006, 14:44
У QT4.1 можно сделать так

QPrinter printer();
printer.setOutputFileName(fileName);
printer.setOutputFormat(QPrinter::PdfFormat);
report->print(&printer);

и в файле с именем fileName будет PDF документ... Смотрится вполне хорошо...


Название: Отчеты
Отправлено: nEoN от Январь 24, 2006, 15:07
А кто нибудь знает, есть ли в Qt 4.1 возможность просмотра PDF ?
Очень удобно было бы в качестве print preview использовать.


Название: Отчеты
Отправлено: LestorN от Январь 24, 2006, 15:14
Вот с print preview облом... Мне пока не сильно нужно, я не особо копал... Идея вертится около того что и QPrinter и QWidget являются наследниками от QPaintDevice. Пытался распечатать на QWidget или что-то типа того (давно было не помню уже) но ничего не получилось. Есть идеи?


Название: Отчеты
Отправлено: nEoN от Январь 24, 2006, 16:50
С отображением PDF похоже нереальная задача, разве что в Win использовать ActiveQt+Adobe Acrobat Reader.

А вообще, если повозиться, помоему реально сделать "Print preview widget".
Если отчёт у нас в виде HTML, то можно сделать функцию, аналогичную методу QTextDocument::print(QPrinter *printer) , т.е. используя настройки принтера выводить результат не на принтер (там это QPainter(printer)), а на экран QPainter(widget), преварительно масштабируя под размеры виджета.

В исходниках QTextDocument::print() всё подробно описано ;-)


Название: Отчеты
Отправлено: beginner от Январь 26, 2006, 00:56
Так всё-таки, для создание html и openoffice доков нет никаких спецсредств?


Название: Отчеты
Отправлено: Вудруф от Январь 26, 2006, 07:21
ИМХО, html-то можно и руками создавать...


Название: Отчеты
Отправлено: beginner от Январь 26, 2006, 19:36
Цитата: "Вудруф"
ИМХО, html-то можно и руками создавать...
Ясно что можно, и OpenOffice тоже можно, как и многие другие, но думал, что есть какие-нибудь средства которые упрощают этот процесс. Нет так нет.


Название: Отчеты
Отправлено: crocus от Январь 27, 2006, 06:01
to LestorN:
А подскажи пожалуйста как ты добился на печать всех страниц документа, я использую пример imageviewer для просмотра,
там image отображается в Qlabel и далее в  QScrollArea, и мне отображается только первая страница.


Название: Отчеты
Отправлено: LestorN от Январь 27, 2006, 08:53
to crocus

Я немного не понял вопроса. Если ты про предпросмотр, то я его так и не расколдовал, не заработало. А сам QTextDocument смотрю через QTextEdit


Название: Отчеты
Отправлено: Sergey B. от Январь 27, 2006, 09:27
Цитата: "LestorN"
to crocus

Я немного не понял вопроса. Если ты про предпросмотр, то я его так и не расколдовал, не заработало. А сам QTextDocument смотрю через QTextEdit


Расшифруй кодом
 :D


Название: Отчеты
Отправлено: LestorN от Январь 27, 2006, 10:08
QTextDocument *doc = QTextDocument();

// издеваемся над doc

QTextEdit *te = new QTextEdit();
te->setDocument(doc);


Название: Отчеты
Отправлено: crocus от Январь 27, 2006, 10:17
Под рукой проекта нет только вечером,
смысл такой как и рекомендовал товарищ nEoN используем исходник
QTextDocument::print и скрещиваем с http://prog.org.ru/forum/topic_2433.html,  основная проблема была как загнать текст в QRect.


Название: Re: Отчеты
Отправлено: naico от Октябрь 24, 2008, 12:51
Привет! Понимаю, что некропост, но мой  вопрос в точности соответствует теме.
Есть такая проблема  - есть наборы различных объектов, нужно отобразить их в форме таблицы, распечатать.
Первое, что мне пришло в голову это руками генерить html, благо, что для этого мало что нужно. Т.е простым циклом по всем объектам пройтись, добавляя соответствующие строчки в таблицы, вот и весь файл. Ну а его уже можно показать на QTextWidget, распечатать, т.е все что мне нужно.
Второе что мне пришло в голову  - это что уже точно есть генератор отчетов. Он, вернее они, и есть,но либо недоделанные, либо за $, которого мне никто не даст. К тому же обязательное условие - ко всему что я пишу  и использую должны быть исходники, а тут с этим загвоздка, поэтому от этого я отказался.

В данный момент я думаю быстренько накатать класс, генерирующий html, и так решить проблему, но несколько смущает кустарность этого решения, ясно, что нормальный редактор я не сделаю. Может сталкивались с таким, есть предложения?


Название: Re: Отчеты
Отправлено: Admin от Октябрь 24, 2008, 13:19
Я у себя в программе так и сделал. Есть файлик в формате html, в нем теги типа:

Код:
<tr>{$WORD}</td>

при подстановке в QTextWidget теги парсятся - пока все довольны. Но как промышленное решение не пойдет.  >:(


Название: Re: Отчеты
Отправлено: spirit от Октябрь 24, 2008, 13:35
а если XLTS заюзать, sablot классная штука.


Название: Re: Отчеты
Отправлено: naico от Октябрь 24, 2008, 15:01
Я у себя в программе так и сделал. Есть файлик в формате html, в нем теги типа:

Код:
<tr>{$WORD}</td>

при подстановке в QTextWidget теги парсятся - пока все довольны. Но как промышленное решение не пойдет.  >:(

Ну да, особенно если учесть, что данных может быть очень много, например 100мб, а генерится html не так уж и быстро, получается что нужно писать разбивалку на куски из исходных данных, плюс такие опции как "отключить в отчете колонку такую-то"  приводят к перегенерации всего отчета для промышленного использования не пойдет конечно.
Я сейчас думал над тем как приладить http://www.qt-apps.org/content/show.php/TableView+Printer?content=76616 эту поделку умельцев - пришлось отказаться, слишком медленно по скорости при больших объемах данных, так что делать нечего. Придется генерить, причем, видимо, ручками html.


Название: Re: Отчеты
Отправлено: Admin от Октябрь 24, 2008, 15:38
100 мб текста - это очень много!
диссертация доктора наук 20 мб - 300 страниц в верде!

слишком у вас задача специфичная)) у меня вот 1 страничка)


Название: Re: Отчеты
Отправлено: naico от Октябрь 24, 2008, 15:48
Ну задача связана с просмотром событий, происходящих в сети, соответственно если администратор - идиот, то он может захотеть скачать и распечатать базу данных. В таком случае, конечно, быстродействия ему не обещает, но нужно хотя бы, чтобы ничего не упало:)


Название: Re: Отчеты
Отправлено: Tonal от Октябрь 24, 2008, 17:03
Ежели ты эти 100мв будешь сразу в файл писать, то какие проблемы?

Как раз для очень больших массивов данных какие-нибудь стандартные отчётеры всё равно подходят хреново - они всё в памяти пытаются разместить в каких-нибудь вариантах, да ещё выполнять скрипты над этим. :)

Так что эжели данных потенциально много, а особых изысков не требуется, то ручная генерация  html, а то и ps всяко рулит! :)


Название: Re: Отчеты
Отправлено: Admin от Октябрь 25, 2008, 08:22
Попробуйте открыть 100 мег в firefox или же в IE - тормозить они будут, ибо html нужно рендрить.
Тут надо какойто другой принцип типа просматривать одновременно можно 5 страниц, если печатать то генерить html для 5 страниц ( в цикле).


Название: Re: Отчеты
Отправлено: Tonal от Октябрь 25, 2008, 08:32
Чем и зачем кто-то будет потом открывать этот файл уже не проблема программы.
Тот же ps можно прямо на принтер и выкинуть, да и html, думаю тоже через соответствующие фильтры. :)

А вот если заказчик затребует полный предпросмотр этоё дури, то придётся немного подумать.
Но опять же, предпросмотр можно сделать не сгенерённого мегафайла, а исходной информации. На основе того же TableView-а. :)


Название: Re: Отчеты
Отправлено: panAlexey от Октябрь 25, 2008, 09:15
А вот если заказчик затребует полный предпросмотр этоё дури, то придётся немного подумать.
хе-хе... ну пусть купит монитор размером с Красную площадь...


Название: Re: Отчеты
Отправлено: Admin от Октябрь 25, 2008, 10:40
Часто на форумах бывают топики:
Q: Хочу вывести на форму 1M записей. Как?
A: Зачем? ;D


Название: Re: Отчеты
Отправлено: Rcus от Октябрь 25, 2008, 11:27
Мне кажется что в html нужно генерить отчеты только для людей.
Если вам нужно выгрузить в отчет много данных (бывает такое), то подумайте, может быть их будут обрабатывать не люди, а машины.
Если так, то мне кажется лучше сделать выдачу в csv или даже fixed column формате, парсить их гораздо проще (все это мне напомнило как один оператор связи присылал детализацию телефонных соединений в html на 10к записей размером в 5мб, IE даже не пытался такое открыть, сразу зависал)


Название: Re: Отчеты
Отправлено: naico от Октябрь 26, 2008, 09:47
Короче сейчас я сделал следующим образом - отображение данных "для людей" идет через QTableView + QTextView, часть информации выводится в таблицу, с ней работает сортировка, а основной массив никому не нужной информации идет в виде текста. Ну и эти две формочки связаны - текст отвечает выделенной строчке в таблице. Без текстовой формочки было слишком некрасиво - слишком много колонок.

Подгружаю текст в таблицу частями, что не дает ей упасть - единственный минус, что надо будет продумать как не дублировать все данные в оперативке, а например, хранить их в xml и при необходимости загружать, пока не до конца разобрался с этим.

А на печать генерю html :)