Russian Qt Forum
Ноябрь 22, 2024, 06:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: не могу задать размер печати  (Прочитано 3816 раз)
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« : Январь 17, 2014, 13:03 »

Hi !

В исходных кодах есть пример (qt-everywhere-opensource-src-4.8.4/examples/graphicsview/portedcanvas), в нем интересен только метод печати.
Поправил его так (добавил печать в pdf):

Код:
void Main::print()
{
//---------------add------------------
    QPrinter printerP;
    printerP.setOutputFormat(QPrinter::PdfFormat);
    printerP.setOutputFileName("test.pdf");
    printerP.setPaperSize(QSizeF(1, 1), QPrinter::Inch);
    printerP.setPageMargins(0, 0, 0, 0, QPrinter::Inch);
    QPainter pP(&printerP);
    canvas.render(&pP);
    pP.end();
//---------------add------------------

    if ( !printer ) printer = new QPrinter;
    QPrintDialog dialog(printer, this);
    if(dialog.exec()) {
        QPainter pp(printer);
        printer->setPaperSize(QSizeF(1, 1), QPrinter::Inch);
        printer->setPageMargins(0, 0, 0, 0, QPrinter::Inch);
        canvas.render(&pp);
    }
}

При этом test.pdf создается с желаемым размером, а если напечатать на реальный принтер (или в pdf средствами системы), то имею A4 - почему так ?
Также ms office word может распечатать (и на pdf) принтер с любыми размерами.
Т.о. что не хватает в приведенном коде для печати на желаемый размер бумаги ?
Записан
viktand
Гость
« Ответ #1 : Апрель 09, 2014, 13:37 »

Почти та же проблема. Задаю 10х15, печатает правильно, но позиционирует область печати в нижний левый угол А4. Т.е. если положить в лоток реальный лист 10х15, то на него ничего не попадет.

Пока решил проблему путем задания полей на А4 так, чтобы область печати соответствовала требуемому размеру.

Код:
               printer->setPaperSize(QPrinter::A4);
               qreal l, b;
               l=(210-102)/2;
               b=297-152;
               printer->setPageMargins(l,0,l,b,QPrinter::Millimeter);

Вместо 102 и 152 у меня реально стоят переменные с меняющимися значениями размеров листа.
Нижнее поле можно в принципе не задавать, туда все равно ничего не попадает.

Работает, но чувствую, что это не правильно и некрасиво.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.