Название: QPrinter. Автоматическое разбиение на страницы Отправлено: MrDron от Ноябрь 08, 2017, 21:28 Здравствуйте! А можно ли как-то сделать автоматическую разбивку на листы (например A4) при рисовании QPainter'ом?
Дело в том, что есть много длинных вертикальных графиков, которые выгружаются в PDF и получается один длинный лист. newPage() не подходит. Возможно какой-нибудь отдельной консольной софтиной под винду. Название: Re: QPrinter. Автоматическое разбиение на страницы Отправлено: panAlexey от Ноябрь 09, 2017, 10:56 Делал внутри своей софтины. Соответственно сначала рубка на листы идет, а уже потом принтуем:
Код: /// Вывод на печать.... bool uoReportDoc::printDoc(const bool updPrintSourse, QWidget* qwidg) { bool retVal = false; QPrinter* pPrinter = uoReportManager::instance()->printer(); if(!pPrinter){ qWarning() << QString::fromUtf8("Принтер не создан!"); return retVal; } uorAresList* list = m_pageList; if(updPrintSourse){ list = getPageList(); } if (!list || !list->count()) /// Nagumanov 14.05.2010 Добавлена проверка на размер листа return retVal; if (!setupPrinter(*pPrinter, qwidg)) return true; /// Nagumanov 14.05.2010 Возвращать true, даже если отказались от печати int pageNomFrom = 0, pageNomTo = 0; QPrinter::PrintRange prnRange = pPrinter->printRange(); if (prnRange == QPrinter::PageRange) { pageNomFrom = pPrinter->fromPage(); pageNomTo = pPrinter->toPage(); } qreal scaleFactor = m_pagesSetings->scale(); qDebug() << QString("bool uoReportDoc::printDoc scaleFactor = %1").arg(scaleFactor); uoPainter painter; painter.begin(pPrinter); painter.scale(scaleFactor,scaleFactor); bool firstPage = true; uoReportDrawHelper* drawHelper = new uoReportDrawHelper(this); drawHelper->initDrawInstruments(); drawHelper->setDirectDraw(false); // Если используется пиксмап кешер, то текст почему-то печатается на черном фоне белым.. bool usePC = usePictCasher(); setUsePictCasher(false); uorReportAreaBase aBase; uorReportPrintArea* area = NULL; int pageGurNo = 0; uorAresListCnstIter iter = list->constBegin(); while (iter != list->constEnd()){ pageGurNo += 1; if (prnRange == QPrinter::PageRange) { if (!(pageNomFrom<=pageGurNo && pageNomTo>=pageGurNo)){ iter++; continue; } } if (!firstPage) pPrinter->newPage(); area = *iter; aBase = (*area); aBase.m_areaType = 2; drawHelper->drawDataArea(painter, aBase); iter++; firstPage = false; } setUsePictCasher(usePC); delete drawHelper; return true; } Название: Re: QPrinter. Автоматическое разбиение на страницы Отправлено: MrDron от Ноябрь 09, 2017, 11:37 Спасибо
|