【问题标题】:Print multiple QTextDocuments with QPrinter使用 QPrinter 打印多个 QTextDocument
【发布时间】:2014-07-25 05:50:49
【问题描述】:

我需要为用户动态创建的许多对象生成一个要打印的文档,并且我想打印这些文档。我写了以下代码(generateDocument() 引用文档来添加html代码):

QPrinter printer;
QPrintDialog popup(&printer);
if (popup.exec() == QDialog::Accepted)
{
    for (int i = 0; i < _quiz->getSerieCount(); i++)
    {
        QTextDocument doc;
        generateDocument(doc, _quiz->getSerie(i));
        doc.print(&printer);
    }
}

当打印到 pdf 时,linux 和 windows 中的行为是不同的:在 linux 上,这只是打印最后生成的文档,而在 windows 上,它会提示为每个 generateDocument() 调用选择一个新的 pdf。

我应该这样做吗?

【问题讨论】:

  • 为什么每个 getSerie 都需要一个新的 QTextDocument?您是否尝试过将所有 HTML 添加到单个 QTextDocument 中?
  • 我可以强制在html中开始一个新页面吗?要求每个系列打印在不同的页面上...

标签: c++ qt qtextdocument qprinter


【解决方案1】:

您可以为每个系列添加分页符,然后打印文档。
尝试以下例如

QTextDocument doc;
QTextCursor cursor(&doc);

for (int i = 0; i < _quiz->getSerieCount(); i++)
{
    if(i!=0) \\ dont add page break for the first document
    {
        QTextBlockFormat blockFormat;
        blockFormat.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysAfter);
        cursor.insertBlock(blockFormat);
    }

    // < append _quiz->getSerie(i) contents in the document >    
}

doc.print(&printer);

尚未测试代码,但我想应该可以在 Windows 上正常工作,因为我使用它的方式类似,没有任何问题。无法评论它在 Linux 机器上的行为。您可以更好地修改它以满足您的需要。
希望这会有所帮助。

【讨论】:

  • 我们可以使用分页符来分隔页面,例如在不同的 qtextedit 或其他小部件中显示每个页面怎么样?
猜你喜欢
  • 2018-08-12
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2013-11-08
  • 2015-05-17
  • 1970-01-01
相关资源
最近更新 更多