// 0 <= pageNo <numPage CImage* getPage(int w, int h, int pageNo) { if(!cacheValid(w,h,pageNo)) { // poppler uses 1 indexing for pageNo. double DPI_W=calcDPI_width(w, pageNo); double DPI_H=calcDPI_height(h, pageNo); double DPI=MIN(DPI_W, DPI_H); delete _textCache[pageNo]; _textCache[pageNo]=new intmatrixn(); _textCacheState=pageNo; //_pdfDoc->getPageRotate(pageNo+1) _pdfDoc->displayPage(_outputDev, pageNo+1, DPI, DPI, 0, gFalse, gTrue, gFalse); #ifdef USE_NULLOUTPUTDEV _nullOutputDev->setInfo(_pdfDoc->getPageRotate(pageNo+1), _pdfDoc->getCatalog()->getPage(pageNo+1)->getCropBox()->x1, _pdfDoc->getCatalog()->getPage(pageNo+1)->getCropBox()->y1, _pdfDoc->getPageCropWidth(pageNo+1), _pdfDoc->getPageCropHeight(pageNo+1), _outputDev->getBitmap()->getWidth(), _outputDev->getBitmap()->getHeight()); _pdfDoc->displayPage(_nullOutputDev, pageNo+1, DPI, DPI, 0, gFalse, gTrue, gFalse); #endif _textCacheState=-1; /*//_pdfDoc->displayPageSlice(_outputDev, pageNo+1, DPI, DPI, 0, gFalse, gTrue, gFalse, 20,20, 400,400); if(zoom2<zoom1) { if(h==_outputDev->getBitmap()->getHeight()) bOkay=true; else { vDPI=72.0*h/_pdfDoc->getPageCropHeight(pageNo+1); } } else { if(w==_outputDev->getBitmap()->getWidth()) bOkay=true; else { double tt=72*w/_pdfDoc->getPageCropHeight(pageNo+1); } } } while(!bOkay);*/ SplashBitmap *temp=_outputDev->takeBitmap(); CImage* ptr=new CImage(); ptr->SetData(temp->getWidth(), temp->getHeight(), temp->getDataPtr(), temp->getRowSize()); delete _bmpCache[pageNo]; _bmpCache[pageNo]=ptr; delete temp; } return _bmpCache[pageNo]; }
double pageCropHeight(int pageNo) { int rotate=_pdfDoc->getPageRotate(pageNo+1); if(rotate==90 || rotate==270) return _pdfDoc->getPageCropWidth(pageNo+1); return _pdfDoc->getPageCropHeight(pageNo+1); }