Делал внутри своей софтины. Соответственно сначала рубка на листы идет, а уже потом принтуем:
/// Вывод на печать....
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;
}