近期做了一个项目,这个项目需要调用QT 的通用接口实现跨平台打印pdf文件,遇到了一些坑特此纪录一下。
1, QPrinter printer(QPrinter::ScreenResolution);//构造打印对象
printer.setPageSize(QPrinter::A4); //页面设置
printer.setOrientation(QPrinter::Portrait);
2,QPrintDialog printDialog(&printer); //构造打印对话框
//QPrintPreviewDialog previewDialog(&printer);
//QObject::connect(&previewDialog,&QPrintPreviewDialog::paintRequested, widgetPdf, &WidgetPdf::onPrintPreview); //previewDialog.exec();
if(printDialog.exec()) //最重要的一点,打印文件要读出文件内容,分页绘制至Printer
{
widgetPdf->onPrintPreview(&printer); //绘制内容
}
3,绘制内容显示
void WidgetPdf::onPrintPreview(QPrinter *printer)
{ printer->setWinPageSize(pageCount); QPainter painter(printer);
unsigned char *pageData = NULL;
painter.begin(printer);
for(int index = 0;index <pageCount;index++)
{
QPixmap pixmap;
BASE_PAGE pageHandel = 0;
BASE_DOC_LoadPage(docHandle,index,&pageHandel);
BASE_PAGE_Render(pageHandel,pageWidth,pageHeight,&pageData);
QImage image(pageData,pageWidth,pageHeight,QImage::Format_RGB32);
pixmap = pixmap.fromImage(image);
QRect rect = painter.viewport();
QSize size = pixmap.size();
size.scale(rect.size(), Qt::KeepAspectRatio);//此处保证图片显示完整
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(pixmap.rect());
painter.drawPixmap(0,0,pageWidth,pageHeight, pixmap);
if(index < pageCount-1)
printer->newPage();
}
painter.end();
}