QWidget->render()
打印预览1:QPixmap
QPrintPreviewDialog preview(&printer, this);
connect(&preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(printPreview(QPrinter*)));
preview.exec();
void printPreview(QPrinter *printer)
{
QPixmap pixmap(widget.size());
widget->render(&pixmap);
pixmap.save("E://test.png", "png");
}
图片打印预览
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dialog(&printer);
if(dialog.exec() == QDialog::Accepted)
{
QPixmap pixmap;
pixmap.fromImage(QImage(strbmp));
QPainter painter(&printer);
QRect rect = painter.viewport();
int x = rect.width() / pixmap.width();
int y = rect.height() / pixmap.height();
painter.scale(x, y); // 图片缩放
painter.begin(&printer);
painter.drawPixmap(0,0,pixmap); // 打印
painter.end();
}
打印
方案1:
QPrinter printer; //(QPrinter::PrinterResolution)
printer.setOutputFormat(QPrinter::NativeFormat);
printer.setFullPage(true);
// printer.setPageMargins(6,6,6,6,QPrinter::Millimeter);
// printer.setOrientation(QPrinter::Landscape);
// printer.setPaperSource(QPrinter::OnlyOne);
printer.setPageSize(QPrinter::A4);
QString strprinter = ui.toolButton_setting->text();
printer.setPrinterName(strprinter);
QPrintDialog *printdlg = new QPrintDialog(&printer);
if (printdlg->exec() == QDialog::Accepted)
{
m_WebView->render(&printer);
}
方案2(失败):
m_WebView->page()->print(&printer, [](bool){});
分页打印
QPrintDialog *printdlg = new QPrintDialog(&printer);
if (printdlg->exec() != QDialog::Accepted)
{
return;
}
QImage imagebmp(strbmp);
int ibmpwidth = imagebmp.width();
int ibmpheight = imagebmp.height();
// 获取页数
int ipage = ibmpheight / int(rectfprinter.height());
if (ibmpheight % int(rectfprinter.height()) > 0)
{
ipage += 1;
}
QPixmap pixmap = QPixmap::fromImage(imagebmp);
QPainter painter(printer);
painter.begin(printer);
for (int i=0; i< ipage; i++)
{
int istartx = i * rectfprinter.height(); // 图片开始位置定位
int icurheight = ibmpheight - istartx > rectfprinter.height()? rectfprinter.height() : ibmpheight -istartx;
QPixmap pixmappart = pixmap.copy(0, istartx, ibmpwidth, icurheight); // 截取图片
QRect rect = painter.viewport();
float x = (float)rect.width() / pixmappart.width(); // 缩放因子:图片超出打印边界
// int y = rect.height() / pixmappart.height();
painter.scale(x, 1);
painter.drawPixmap(0,0, pixmappart);
if (i != ipage - 1)
{
printer->newPage(); // 分页
}
}
painter.end();
https://stackoom.com/question/2DFrJ
https://www.php.cn/div-tutorial-393547.html