c++ - 无法使用 QPdfWriter 在 pdf 文件中添加新页面

标签 c++ qt pdf

我正在尝试生成一个包含多个页面的 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/

相关文章:

c++ - 链表/vector 中的指针

c++ - 更新进程地址空间中的 HTML 内容

c++ - 当 GUI 线程在 Qt 中空闲时发出信号?

c++ - 如何理解 makefile 脚本中的 'test'?

C++ 迭代器到 const_iterator

c++ - 再次打开应用程序时如何显示应用程序 Qt

c++ - 如何使用 C++ 在 opencv 中舍入 float

java - 读取 pdf 中的现有边距

pdf - iText:人们使用什么类型的证书在 Linux 上自动签名 PDF?

c# - 如何从 C# 中的 pdf 中提取图像?