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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод на печать простого отчета  (Прочитано 12412 раз)
Sashok
Гость
« : Октябрь 20, 2013, 09:53 »

Доброго дня Всем.
Начал изучать Qt совсем недавно, как то заинтересовал он меня.
Хочу поделиться банальной мелочью с которой может многие то же сталкиваются по началу.
Задача в том чтобы вывести простенький отчет на печать. Казалось бы что сложного, но я не сразу въехал,
а примеры в литературе меня даже немного запутали.
В итоге собственных экспериментов сделал так.
 
Код:
         QPrinter printer;

         QPrintDialog printDialog(&printer, this);

         if (printDialog.exec())
         {
         // объект отрисовки
         QPainter painter;

         // проверка открытия для редактора
         if (! painter.begin(&printer))
         {
             // открытие принтера проверим
             qWarning("Ошибка открытия принтера!");
             return; // Выходим
         }
         
         // Сообственно все, откроется диалог где указывать принтер нужно, далее рисуем просто наш отчет
         //Теперь давайка отрисуем отчет на этом принтере
        painter.setFont(QFont("Arial", 14)); //шрифт
        painter.setPen(QPen(2)); // толщина линий таблицы
        int y_pdf = 30;
        int WtabPdf=350;
        int X_oneTab = 20;
        int X_twoTab = 370;
        int H_tab = 25;
        painter.drawText(230,y_pdf, "Протокол № " + m_ui->labelNumberZav_znach->text());
        y_pdf +=H_tab;
        QRect rectfont = QRect(X_oneTab,y_pdf,WtabPdf,H_tab);
        painter.drawRect(rectfont);
        painter.drawText(rectfont, Qt::AlignLeft ,"Заводской номер");
        rectfont.setRect(X_twoTab,y_pdf,WtabPdf,H_tab);
        painter.drawRect(rectfont);
        painter.drawText(rectfont, Qt::AlignLeft ,m_ui->labelNumberZav_znach->text());
         // и так далее рисуем
         painter.end(); // завершаем рисование
        }  // end printDialog.exec()
 

Но еще в реальных задачах необходимо  хранить где то отчеты. Здесь как-то проще.
Например есть встроенная возможность сохранить в PDF.
Код:
          QPrinter printer;

         printer.setOutputFormat(QPrinter::PdfFormat);
          // название протокола формируем согласно заводскому номеру и году
         printer.setOutputFileName( "protocol/" + m_ui->labelNumberZav_znach->text()
                                    + m_ui->labelNumberDec_znach->text()
                                    +".pdf");  //  по другому printer.setOutputFileName("Test.pdf");

         // далее все также как и при печати
         // объект отрисовки
         QPainter painter;

         // проверка открытия для редактора
         if (! painter.begin(&printer))
         {
             // открытие файла проверим
             qWarning("Ошибка открытия файла!");
             return; // Выходим
         }
          // рисуем отчет
          // ......
              painter.end(); // завершаем рисование


А вот вопрос знающим, можно как то напечатать уже созданный раннее pdf?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 20, 2013, 11:33 »

А вот вопрос знающим, можно как то напечатать уже созданный раннее pdf?
У Qt таких средств нет. См. Poppler.
Записан

Qt 5.11/4.8.7 (X11/Win)
Sashok
Гость
« Ответ #2 : Октябрь 21, 2013, 11:34 »

А не могли бы порекомендовать инструкцию как прикрутить такую библиотеку к Qt5.1.1
Записан
Sashok
Гость
« Ответ #3 : Октябрь 21, 2013, 18:53 »

А вот вопрос знающим, можно как то напечатать уже созданный раннее pdf?
У Qt таких средств нет. См. Poppler.

Поискав собрал библиотечку по примеру http://pavelk.ru/kompilyaciya-poppler-qt5-v-windows-na-mingw, немного под себя подстроить пришлось в путях. 5.1.1 немного не так устанавливается как 5.1.0.
Есть ли пример пользования данной библиотеки "Распечатать файл Test.pdf" например.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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