如何将多个表格打印成一个pdf
How to print multiple tables into one pdf
我正在尝试使用 qt 在单个 pdf 中打印多个 table (qtablewidget) 对象。
我可以打印一个 table,使用 (https://forum.qt.io/topic/80501/qpainter-howto-draw-table/7)
中提供的代码
QPixmap pix(widget->size());
QPainter painter(&pix);
widget->render(&painter);
painter.end();
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Landscape);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setOutputFileName("test.pdf"); // will be in build folder
painter.begin(&printer);
painter.drawPixmap(0, 0, pix);
painter.end();
但是,如果我尝试打印多个 table,代码就会失败。如果我创建多个 QPainter,qt 只会输出多个 pdf,每个 pdf 中有一个 table。我正在尝试使用一个 QPainter 和多个 QPixmaps 来做到这一点,但到目前为止没有成功。
谁能告诉我如何绕过它?
如有任何帮助,我们将不胜感激
此致,
代码怎么会失败?下面应该工作(我没有测试它)。注意没有手动对象生命周期管理:让编译器为你做。 QPainter
是一个正确的 C++ class 并且知道如何释放其资源而无需手动调用 QPainter::end()
.
void printWidgets(QWidgetList widgets) {
QVector<QPixmap> pixmaps;
for (auto *w : widgets) {
QPixmap pix(w->size());
QPainter painter(pix);
w->render(&painter);
pixmaps.push_back(pix);
}
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Landscape);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setOutputFileName("test.pdf"); // will be in build folder
QPainter painter(&printer);
QPoint pos;
for (auto &pix : qAsConst(pixmaps)) {
painter.drawPixmap(pos, pix);
pos.ry() += pix.height(); // stack the output vertically
}
}
我正在尝试使用 qt 在单个 pdf 中打印多个 table (qtablewidget) 对象。
我可以打印一个 table,使用 (https://forum.qt.io/topic/80501/qpainter-howto-draw-table/7)
中提供的代码QPixmap pix(widget->size());
QPainter painter(&pix);
widget->render(&painter);
painter.end();
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Landscape);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setOutputFileName("test.pdf"); // will be in build folder
painter.begin(&printer);
painter.drawPixmap(0, 0, pix);
painter.end();
但是,如果我尝试打印多个 table,代码就会失败。如果我创建多个 QPainter,qt 只会输出多个 pdf,每个 pdf 中有一个 table。我正在尝试使用一个 QPainter 和多个 QPixmaps 来做到这一点,但到目前为止没有成功。
谁能告诉我如何绕过它?
如有任何帮助,我们将不胜感激
此致,
代码怎么会失败?下面应该工作(我没有测试它)。注意没有手动对象生命周期管理:让编译器为你做。 QPainter
是一个正确的 C++ class 并且知道如何释放其资源而无需手动调用 QPainter::end()
.
void printWidgets(QWidgetList widgets) {
QVector<QPixmap> pixmaps;
for (auto *w : widgets) {
QPixmap pix(w->size());
QPainter painter(pix);
w->render(&painter);
pixmaps.push_back(pix);
}
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Landscape);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setOutputFileName("test.pdf"); // will be in build folder
QPainter painter(&printer);
QPoint pos;
for (auto &pix : qAsConst(pixmaps)) {
painter.drawPixmap(pos, pix);
pos.ry() += pix.height(); // stack the output vertically
}
}