You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt 6.8导出HTML到PDF部分字符不可见问题求助

Qt 6.8 HTML转PDF部分字符不可见(仅可复制粘贴显示)的问题分析

问题描述

  • 在Qt 6.8版本中导出HTML到PDF时,部分字符无法正常显示,但选中后通过Ctrl+C/Ctrl+V可复制出完整内容,说明文本数据存在但渲染失效。
  • 相同代码在Qt 6.6版本编译后,PDF导出无此异常,所有字符正常显示。

相关代码示例

// 核心导出逻辑示例
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("exported.pdf");

QTextDocument htmlDoc;
htmlDoc.setHtml(targetHtml); // targetHtml为待导出的HTML内容
htmlDoc.print(&printer);

问题截图

PDF字符不可见的异常截图

可能原因

  1. Qt 6.8渲染引擎变更:Qt 6.7及后续版本对PDF导出的字体渲染、文本排版逻辑做了调整,特定字符(如非ASCII符号、特定字体字符)的渲染适配存在bug。
  2. 字体嵌入失效:Qt 6.8可能未正确嵌入PDF所需字体,导致字符无法渲染但底层文本数据未丢失。
  3. HTML/CSS兼容性问题:新版本QTextDocument对部分CSS属性(如font-family、text-rendering)的解析规则改变,引发渲染异常。

解决方案

  • 临时回退版本:若项目允许,暂时使用Qt 6.6编译导出,规避新版本的兼容性问题。
  • 强制字体嵌入:在代码中启用字体嵌入,并在HTML中明确指定系统可用字体:
    printer.setFontEmbeddingEnabled(true);
    
    HTML中添加:
    <style>body { font-family: "Microsoft YaHei", Arial, sans-serif; }</style>
    
  • 替换导出方式:尝试使用QPdfWriter替代QPrinter,测试是否修复渲染问题:
    QPdfWriter writer("output.pdf");
    writer.setPageSize(QPageSize::A4);
    QTextDocument doc;
    doc.setHtml(targetHtml);
    doc.drawContents(&writer);
    
  • 等待官方补丁:该问题大概率是Qt 6.8的已知bug,可关注Qt官方更新,后续补丁版本可能修复。

内容的提问来源于stack exchange,提问作者Arleudo Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:46:10