Russian Qt Forum

Qt => Печать => Тема начата: andi от Август 20, 2007, 11:32



Название: Печать отчета
Отправлено: andi от Август 20, 2007, 11:32
Здрасте всем. Нужна помощь в следующем вопросе.
По результатам работы программы нужно вывести не принтер 2 страницы текста.
Так называемый протокол испытаний.
Перед выводом нужно эти страницы просто просмотреть на экране и по нажатию кнопки отправить на принтер по умолчанию.
Заполнение полей осуществляется программно.  Никаких баз данных и прочих сложностей.
Как быстрей и проще всего это осуществить. Возможно у кого то есть пример?
Посмотрел в сторону ncreport и openrpt. Но как я понял они заточены под использование БД.
Для меня этот функционал избыточен.



Название: Re: Печать отчета
Отправлено: Пантер от Август 20, 2007, 11:44
Я использую шаблоны html в которые вставляю данные и для просмотра отправляю в
QTextDocument. Если заинтересовало, могу вечером запостить пример.


Название: Re: Печать отчета
Отправлено: Sergey B. от Август 20, 2007, 12:01
Посмотри в qtdemo Text Edit (Print preview) там сделан очень грамотно, им и пользуюсь.
Формируешь свой документ (а формировать документ можно как угодно), а дальше отправляешь его классу из примера.
Там даже ни строчки кода подписывать не надо.



Название: Re: Печать отчета
Отправлено: Sergey B. от Август 20, 2007, 12:04
Я использую шаблоны html в которые вставляю данные и для просмотра отправляю в
QTextDocument. Если заинтересовало, могу вечером запостить пример.

Хотелось бы увидеть.
Можно было бы нарисовать в редакторе красивую страничку, и вставлять данные в неё.


Название: Re: Печать отчета
Отправлено: andi от Август 20, 2007, 12:08
Все примеры приветствуются.
Как выяснилось, с отчетом не  все так гладко.
Есть потребность размещать кое какие данные в таблице.
Что по этому поводу можете посоветовать.
Сижу ковыряю ncreport. Как я уже понял в принципе не обязательно данные брать из БД.
Нигде не могу найти документацию по ncreport (описание классов и прочие справочные данные).
Их вообще нет или я просто плохо искал?

И еще. Я использую Qt 3.3.6 ( в подписи указано), и там нет этого класса для предосмотра.
Получается что придется либо html использвоватье либо ncreport


Название: Re: Печать отчета
Отправлено: Sergey B. от Август 20, 2007, 12:19
Да...
Я писал про Qt4. Там в QTextDocument можно легко вставлять таблицы.
По Qt3, сказать ничего не могу, так как уже 2 года на ней не программирую.


Название: Re: Печать отчета
Отправлено: Пантер от Август 20, 2007, 16:56
Вот такой шаблон:
Код:
<FONT style="font-size: 12pt;">
<p align="center">Справка $NUMBER_REFERENCE</p>
<p align="center">к делу № $NUMBER_DELO</p>
<p>$FIO снят(а) с учета с $DATE_OUT</p>
<p>Основание: $OSNOVANIE</p>
<br>
<p>$PODPIS</p>
<p>$CURRENT_DATE</p>
</FONT>
Вот так заполняю:
Код:
QStringList qslGetPrintText(const QStringList qslStructText)
{
  QStringList qslPrintText=qslStructText;
  qslPrintText.replaceInStrings("$NUMBER_REFERENCE", qsNumberReference);
  qslPrintText.replaceInStrings("$DATE_OUT", qsDateOut);
  qslPrintText.replaceInStrings("$DATE_SNJAT", qsDateOut1);
  qslPrintText.replaceInStrings("$OSNOVANIE", qsOsnOut);
  return qslPrintText;
}
Печатаю так:
Код:
QTextDocument* document=new QTextDocument();
document->setHtml( qslGetPrintText(qslStructList));
QDialog* dlgPreview=new QDialog(this,Qt::WindowMaximizeButtonHint);
dlgPreview->resize(640,480);
QTextEdit* tePreview=new QTextEdit(dlgPreview);
tePreview->setDocument(document);
QVBoxLayout* layout=new QVBoxLayout();
layout->addWidget(tePreview);
dlgPreview->setLayout(layout);
dlgPreview->exec();
delete document;
delete tePreview;
delete dlgPreview;


Название: Re: Печать отчета
Отправлено: andi от Август 21, 2007, 06:03
Почти разобрался с ncreport.
Как выяснилось данные он принимает только из БД или из текста с разделителями (причем только из файла).
Думаю, грязный хак, поможет ему переваривать что-нидь еще прямо из кода.
Хотя мне бы больше подошел вариант запихивания в него xml-файла. Думаю над реализацией.
Может кто-то уже придумал?

За HTML-вариант спасибо. Просто и понятно до безобразия.