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

如何以文本模式打印QWebEngineView中显示的页面?

QWebEngineView打印结果为图像而非文本的解决办法

方案1:通过PDF中转打印(推荐)

直接调用QWebEngineView.print()会默认采用光栅化渲染,导致输出为图像。改用printToPdf()生成PDF后再打印,能完整保留文本的矢量属性,实现浏览器式的文本打印效果。

示例代码:

from PySide6.QtWidgets import QPrintDialog
from PySide6.QtPrintSupport import QPrinter, QPainter
from PySide6.QtCore import QByteArray
from PySide6.QtPdf import QPdfDocument

def print_as_text(self):
    print_dialog = QPrintDialog(self)
    if print_dialog.exec() != QPrintDialog.Accepted:
        return
    
    target_printer = print_dialog.printer()
    
    # 生成页面PDF数据
    def on_pdf_ready(pdf_data: QByteArray):
        if not pdf_data:
            return
        
        # 加载PDF文档
        pdf_doc = QPdfDocument()
        if not pdf_doc.loadFromData(pdf_data):
            return
        
        # 逐页打印
        painter = QPainter(target_printer)
        for page_idx in range(pdf_doc.pageCount()):
            # 匹配页面尺寸与打印区域
            page_size = pdf_doc.pageSize(page_idx)
            painter.setViewport(painter.window().rect())
            painter.setWindow(page_size.toRect())
            # 渲染当前页
            pdf_doc.render(page_idx, painter)
            # 非最后一页则新增打印页
            if page_idx < pdf_doc.pageCount() - 1:
                target_printer.newPage()
        painter.end()
    
    # 触发PDF生成
    self.wevReport.page().printToPdf(on_pdf_ready)

方案2:调整QWebEngine渲染设置

通过修改QWebEngine的设置,强制启用矢量渲染模式,避免光栅化输出:

from PySide6.QtWebEngineWidgets import QWebEngineSettings

# 在初始化QWebEngineView后添加以下设置
self.wevReport.settings().setAttribute(
    QWebEngineSettings.WebAttribute.PrintElementBackgrounds,
    True
)
self.wevReport.settings().setAttribute(
    QWebEngineSettings.WebAttribute.Accelerated2dCanvasEnabled,
    True
)
self.wevReport.settings().setAttribute(
    QWebEngineSettings.WebAttribute.WebGLEnabled,
    True
)

注:该方案在部分环境(如老旧显卡、特定打印机驱动)下可能不生效,优先选择方案1。

额外排查点

  • 检查HTML页面的打印样式(@media print),避免包含强制将文本转为图像的CSS属性(比如transform、filter等)。
  • 确认打印机驱动支持矢量打印,部分低端打印机可能会自动将矢量内容转为图像输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:37:20