【问题标题】:How to print multiple tables into one pdf如何将多个表格打印到一个pdf中
【发布时间】:2018-08-20 11:12:47
【问题描述】:

我正在尝试使用 qt 在单个 pdf 中打印多个表 (qtablewidget) 对象。

我可以使用 (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();

但是,如果我尝试打印多个表格,代码会失败。如果我创建多个 QPainter,qt 只会输出多个 pdf,每个 pdf 中有一个表。我正在尝试使用一个 QPainter 和多个 QPixmap 来做到这一点,但到目前为止没有成功。

谁能告诉我如何解决它?

任何帮助将不胜感激

问候,

【问题讨论】:

  • 旁注:QTableWidget 不是表格。它是一个表格的 UI,但它不是为可打印而设计的。如果您将表格呈现为 html,然后使用 Qt 的格式化文本系统将其打印出来,效果会更好。

标签: qt qpainter qpixmap qprinter


【解决方案1】:

代码如何失败?下面应该可以工作(我没有测试过)。注意没有手动对象生命周期管理:让编译器为你做。 QPainter 是一个适当的 C++ 类,并且知道如何释放其资源而无需手动调用 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
  }
}

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2014-04-08
    • 1970-01-01
    • 2012-07-16
    • 2010-11-26
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多