Название: Отчеты Отправлено: 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 :) |