QT 页面打印 & 打印HTML

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值