Qt 调用打印机批量打印图片,输出为pdf;
void showPrintDialog(const QStringList &paths) {
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
QPixmap img;
QPrintDialog* printDialog = new QPrintDialog(&printer, this);
printDialog->resize(400, 300);
m_printDialogVisible = true;
if (printDialog->exec() == QDialog::Accepted) {
QPainter painter(&printer);
QList<QString>::const_iterator i;
for(i = paths.begin(); i!= paths.end(); ++i){
if (!img.load(*i)) {
qDebug() << "img load failed" << *i;
continue;
}
if (img.width() > img.height())
printer.setPageOrientation(QPageLayout::Landscape);
else
printer.setPageOrientation(QPageLayout::Portrait);
QRect pageOriginRect = printer.pageRect();
QSize pageRect = QSize(pageOriginRect.width() - 8,
pageOriginRect.height() - 8);
img = img.scaled(pageRect, Qt::KeepAspectRatio, Qt::SmoothTransformation);
painter.drawPixmap(0, 0, img);
if (i != paths.end() - 1)
printer.newPage();
}
painter.end();
qDebug() << "print succeed!";
return;
}
QObject::connect(printDialog, &QPrintDialog::finished, this, [=]{
printDialog->deleteLater();
m_printDialogVisible = false;
});
qDebug() << "print failed!";
}