Russian Qt Forum

Qt => Печать => Тема начата: romanick от Май 13, 2011, 07:54



Название: огромный размер документа для печати сцены
Отправлено: romanick от Май 13, 2011, 07:54
Добрый день!
Печатаю сцену с помощью QPrinter, всё замечательно, только размер получившегося job-а, который отправляется на принтер просто огромен.
Печатаю так:
Код:
QPainter painter(&printer);
scene.render(&painter);
Например, размер сцены 1024х768, а размер job, который виден в системной очереди печати Windows, составляет почти 20 Мб. Для примера job этой страницы весит 3 Мб.
Понимаю, что где-до надо задать разрешение, но если уменьшаю QPrinter::setResolution со стандартных 96dpi до 48dpi качество печати резко снижается.
Что я ещё не сделал?


Название: Re: огромный размер документа для печати сцены
Отправлено: Alucard от Май 13, 2011, 10:02
Вас смущает что размер 3 а выводит 20?



Название: Re: огромный размер документа для печати сцены
Отправлено: GreatSnake от Май 13, 2011, 11:07
Цитировать
Например, размер сцены 1024х768, а размер job, который виден в системной очереди печати Windows, составляет почти 20 Мб. Для примера job этой страницы весит 3 Мб.
Это ни о чём ни говорит. Вполне возможно, что отрисовка делается не оптимально.
Распечатай в файл и уже его изучай.


Название: Re: огромный размер документа для печати сцены
Отправлено: romanick от Май 13, 2011, 17:29
Цитировать
Например, размер сцены 1024х768, а размер job, который виден в системной очереди печати Windows, составляет почти 20 Мб. Для примера job этой страницы весит 3 Мб.
Это ни о чём ни говорит. Вполне возможно, что отрисовка делается не оптимально.
Распечатай в файл и уже его изучай.
Не совсем понял что значит "отрисовка делается не оптимально". Я как-то могу на это влиять? Пустая сцена с одним-едиственным прямоугольником QGraphicsRectItem растянутым на всю сцену уже занимает в памяти принтера 1 Мб. Если убрать этот прямоугольник - то размер сразу падает до 2,5 Кб.
И в какой доступный для изучения файл я могу распечатать сцену?


Название: Re: огромный размер документа для печати сцены
Отправлено: GreatSnake от Май 13, 2011, 17:39
Цитировать
Не совсем понял что значит "отрисовка делается не оптимально". Я как-то могу на это влиять?
Конечно, например, рисовать на одном и том же месте несколько раз одно и тоже.

Цитировать
Пустая сцена с одним-едиственным прямоугольником QGraphicsRectItem растянутым на всю сцену уже занимает в памяти принтера 1 Мб.
Сглаживание используется?

Цитировать
И в какой доступный для изучения файл я могу распечатать сцену?
pdf, postscript


Название: Re: огромный размер документа для печати сцены
Отправлено: romanick от Май 13, 2011, 18:29
Конечно, например, рисовать на одном и том же месте несколько раз одно и тоже.
Получается что каждый элемент сцены отправляется на принтер отдельно? И каждый печатает на одном и том же месте?

Цитировать
Сглаживание используется?
painter.setRenderHint(QPainter::Antialiasing); - отключил. ситуация не поменялась


Название: Re: огромный размер документа для печати сцены
Отправлено: romanick от Май 14, 2011, 11:09
Разобрался. Но мне от этого не легче. Всё дело в волшебных пузырьках стиле QPen. Если используется например DotLine, то размер job-а увеличивается на 2 порядка. Как это можно оптимизировать????
Вот простой пример, иллюстрирующий проблему:

   
Код:
QGraphicsView tmp_view(this);
    QGraphicsScene tmp_scene(this);
    tmp_view.setScene(&tmp_scene);

    QPrinter printer;
    QPainter painter(&printer);

    QSize s(1024, 768);
    scene.setSceneRect(QRectF(QPointF(0,0), s));
    scene.addRect(QRectF(QPointF(0,0), s), QPen(), QBrush(Qt::white));

    //Вариант 1. 693 Кб
    //scene.addRect(QRectF(QPointF(100,100), QPoint(1000, 690)), QPen(Qt::DotLine));
    //Вариант 2. 1,62 Кб
    scene.addRect(QRectF(QPointF(100,100), QPoint(1000, 690)), QPen(Qt::SolidLine));

    tmp_view.show();
    scene.render(&painter);