Распечатать несколько QTextDocuments с QPrinter

Мне нужно сгенерировать документ для печати для ряда объектов, которые пользователь создает динамически, и я хочу напечатать эти документы. Я написал следующий код (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 предлагается выбрать новый pdf для каждого вызова generateDocument ().

Я должен сделать это по-другому?

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. Вы можете изменить его лучше, чтобы удовлетворить ваши потребности.
Надеюсь это поможет.

Другие вопросы по тегам