我正在尝试生成一个包含多个页面的 PDF 文件(在 Windows 10 上使用 Qt 6.2.0 和 MinGW 64 位)。
使用以下代码,对 QPdfWriter::newPage
的所有调用都会失败:
QFile outputFile(filename);
if (!outputFile.open(QIODevice::WriteOnly))
return;
QPdfWriter writer(&outputFile);
writer.setPageSize(QPageSize(QPageSize::A5));
writer.setPageOrientation(QPageLayout::Landscape);
QPainter painter;
// First page
if (!writer.newPage())
qWarning() << "newPage failed";
if (!painter.begin(&writer))
qWarning() << "QPainter::begin failed";
QTextDocument page1;
page1.setHtml("<h1 align=center>Page 1</h1><p align=justify>Test page 1</p>");
page1.drawContents(&painter);
if (!painter.end())
qWarning() << "QPainter::end failed";
// second page
if (!writer.newPage())
qWarning() << "newPage failed";
if (!painter.begin(&writer))
qWarning() << "QPainter::begin failed";
QTextDocument page2;
page2.setHtml("<h1 align=center>Page 2</h1><p align=justify>Test page 2</p>");
page2.drawContents(&painter);
if (!painter.end())
qWarning() << "QPainter::end failed";
这段代码只是生成一个只有一页的PDF文件(只有我第二页的内容)。对 QPdfWriter::newPage
的所有调用都会失败,所有其他调用似乎都工作正常。
最佳答案
当您结束画家并重新开始第二页时,您正在重新绘制第一页,您应该从 pdf 文件的开头开始,并在其末尾结束。
这是一个例子:
QPdfWriter writer("test.pdf");
writer.setPageSize(QPageSize(QPageSize::A7));
writer.setPageOrientation(QPageLayout::Landscape);
QPainter painter;
// First page
if (!painter.begin(&writer))
qWarning() << "QPainter::begin failed";
QTextDocument page1;
page1.setHtml("<h1 style=\"color: red\" align=center>Page 1</h1><p style=\"color: red\" align=justify>Test page 1</p>");
page1.drawContents(&painter);
// second page
if (!writer.newPage())
qWarning() << "newPage failed";
QTextDocument page2;
page2.setHtml("<h1 style=\"color: red\" align=center>Page 2</h1><p style=\"color: red\" align=justify>Test page 2</p>");
page2.drawContents(&painter);
if (!painter.end())
qWarning() << "QPainter::end failed";
此外,不需要在第一页之前创建新页面,您最终会在它之前创建一个空页面。
这就是我的想法:Is it possible to make a pdf with different page size in Qt?
关于c++ - 无法使用 QPdfWriter 在 pdf 文件中添加新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76305083/