LINUX.ORG.RU

[Qt3] Помогите сделать предпросмотр печати


0

0

Делаю предпросмотр печати для своей программы. Для каждой страницы генерится QPixmap. Сначала пробовал QScrollView со встроенным QVBox'ом в который добавлялись QWidget'ы с backgroundPixmap, но QScrollView не хотел перелистывать дальше 31 страницы (хз почему). Решил сделать на QCanvas'е. Для каждой страницы создаю QCanvasSprite с изображением и если страниц больше 15-20, то при скроллинге начинаются жуткие тормоза.

Плиз, посоветуйте что-нибудь. Может у кого есть более рациональное решение?


Плохо ищете молодой человек :)
В свое время воспользовался вот этим (тут тебе и шаблонизатор и превью и вывод на принтер):

шаблон

<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;

Авторство не помню, какой-то добрый человек с форума посвященного Qt.
Работало это у меня на Qt3.3.3 и вполне отлично.
Понятно, что пришлось творчески переработать для своих нужд, но с другой стороны работало быстро и без проблем.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

Такой вариант также был рассмотрен, но отброшен из-за не наглядности: нет разбивки на страницы.

Torvus
() автор топика

Я всегда думал, что идеологически правильно -- это создавать postscript для печати, ну а посмотреть его перед печатью плевое дело.

sdio ★★★★★
()
Ответ на: комментарий от sdio

> Я всегда думал, что идеологически правильно -- это создавать postscript для печати, ну а посмотреть его перед печатью плевое дело.

Ну и чем же прикажете этот postscript просматривать, если нет никаких гарантий по поводу установленного софта на конечной машине?

Torvus
() автор топика
Ответ на: комментарий от Torvus

Да-да лучше таскать с собой весь набор нужных библиотек и плевать на систему. Клиенту отдашь пакет под его дистрибутив, в пакете зависимость от "postscript viewer"

sdio ★★★★★
()
Ответ на: комментарий от Torvus

как раз сейчас создаю форму предпросмотра из таблицы (qdatatable):
1. генерю html (таблицу) руками (это несложно)
2. преобразовываю ее в pdf с помощью code.google.com/p/wkhtmltopdf (тут нужн правда qt4 [ движок webkit ] )
3. полученную pdf показываю с помощью poppler http://poppler.freedesktop.org/ (пример там есть)
4. печатаю через вызов lp ранее созданную pdf

если п.2. неподходит - попробуй html2ps - но там проблемы с русскими буквами, а программа заброшена


x905 ★★★★★
()
Ответ на: комментарий от x905

Дело в том, что от программы требуется минимальная зависимость от установленного софта (в идеале только библиотеки Qt)

Torvus
() автор топика
Ответ на: комментарий от Torvus

> от программы требуется минимальная зависимость от установленного софта

(глубоко вздыхая)ну вот и изобретай велосипеды, раз от тебя их требуют...

const86 ★★★★★
()
Ответ на: комментарий от const86

все что перечислено есть в исходниках - так собери под свою систему, в чем проблема ?

x905 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.