Название: 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
Спасибо
|