QPdfWriter生成0字节空白PDF文件问题求助
解决QPdfWriter生成0字节空白PDF的问题
问题核心原因
你代码里提前调用pdf.newPage()是导致空文件的关键:QPdfWriter实例化后默认会自动创建第一页,手动调用newPage()会生成一个空白新页,后续绘制操作实际在这个新页上,但因流程顺序问题,内容未被正确写入文件,最终生成0字节空文件。
另外你使用的图片尺寸(5905x4724)超过了A4横向(600DPI下宽度约4961像素)的页面范围,会导致图片超出可视区域,但这不是生成空文件的原因。
解决方案
移除多余的
newPage()调用
删除pdf.newPage();这一行,让绘制操作直接在默认创建的第一页进行。检查QPainter初始化状态
调用pnt.begin(&pdf)后判断返回值,确保绘制上下文成功创建,避免因初始化失败导致无内容写入。适配图片到页面尺寸
使用QPainter::drawImage的重载方法,将图片缩放到页面范围内,避免内容超出可视区域。
修改后的代码示例
QPdfWriter pdf("test.pdf"); pdf.setTitle("test image"); pdf.setCreator("My App"); pdf.setPageSize(QPageSize(QPageSize::A4)); pdf.setPageOrientation(QPageLayout::Landscape); pdf.setResolution(600); // pdf.setPageMargins(QMargins(30, 30, 30, 30)); QPainter pnt; // 检查绘制上下文是否初始化成功 if (!pnt.begin(&pdf)) { // 可添加错误处理,比如打印日志提示 return; } // 获取页面可用绘制矩形 QRect pageRect = pdf.pageLayout().paintRect(); // 将图片按比例缩放到页面范围内 pnt.drawImage(pageRect, img, img.rect()); // 绘制文本,确保在页面可视范围内 pnt.drawText(100, 100, "Hello World"); pnt.end(); img.save("test.tiff", nullptr, -1);
额外注意事项
- 确保程序对目标文件路径有写入权限,避免因权限问题导致文件生成失败。
- 如果需要生成多页PDF,需在完成当前页绘制后,再调用
newPage()创建下一页。
内容的提问来源于stack exchange,提问作者KungPhoo
相关产品推荐
相关产品推荐

