Python 开发中:web 打印现在有没有好的实现方式,支持分页打印吗?

想咨询下现在 web 有好的方式实现常规打印没? print css 各浏览器现在支持的还是不怎么好?

我现在想把多页内容显示在一个 html 页面,打印的时候支持单独打印,续打(如果编辑内容不足一页,在下次增加输入内容后,可以续打之后的内容),双面打印。

续打实现方式,我设想把原来内容设置为白色,新增内容设置为黑色,这样就可以在普通 a4 纸上实现续打功能了。


Python 开发中:web 打印现在有没有好的实现方式,支持分页打印吗?
11 回复

还不如在后台生成然后让用户下载, 不然你会被浏览器的兼容性搞死


Python Web打印的实现方式

目前主要有两种主流方案:

1. 前端打印方案(推荐)

# 后端只需提供数据接口
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/print-data')
def get_print_data():
    data = {
        "title": "销售报表",
        "items": [
            {"product": "商品A", "quantity": 100},
            {"product": "商品B", "quantity": 200}
        ],
        "total": 300
    }
    return jsonify(data)

前端使用CSS控制分页:

@media print {
    .page-break {
        page-break-after: always;
        break-after: page;
    }
    .avoid-break {
        page-break-inside: avoid;
    }
}

2. 后端生成PDF方案

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm

def generate_pdf_with_pagination():
    c = canvas.Canvas("output.pdf", pagesize=A4)
    width, height = A4
    
    # 第一页
    c.drawString(20*mm, height-20*mm, "第一页内容")
    c.showPage()  # 分页
    
    # 第二页
    c.drawString(20*mm, height-20*mm, "第二页内容")
    c.showPage()
    
    c.save()

# 或者用更高级的库
from weasyprint import HTML

def html_to_pdf():
    html_content = """
    <div class="page">第一页</div>
    <div style="page-break-before: always;"></div>
    <div class="page">第二页</div>
    """
    HTML(string=html_content).write_pdf("output.pdf")

分页支持情况:

  • 前端打印:通过CSS的page-break属性完全支持分页控制
  • 后端PDF:ReportLab的showPage()或WeasyPrint的CSS分页属性
  • 直接打印:使用pywin32(仅Windows)或pycups(Linux)可调用系统打印对话框

建议方案:

  • 简单需求:前端CSS打印 + 后端数据接口
  • 复杂报表:后端生成PDF(推荐WeasyPrint)
  • 精确控制:ReportLab直接操作PDF

总结:用WeasyPrint处理复杂分页最省心。

生成 PDF 再打印。

生成 PDF+1

比较好的方案都是先生成文档,再打印,除非你的打印只考虑 ie.

一般我都是后台用 wkhtmltopdf 转成 PDF 再提供给用户去打印。




pdf 生成在打印没法实时预览,朋友让帮弄一个写病例的简单系统!
我想直接用网页弄个框让他们自己写病例,必须支持续打,如果不通浏览器+不通打印机我估计很难对正续打,难免会错行,所以准备限制在相同浏览器,相同打印机下进行续打。
pdf 生成再打印主要是没法预览,而且续打也不好控制

现在 firefox chrome 这类的浏览器不都支持直接在线看 pdf 文档的么?不算是预览吗?
我用的是 reportlab 生成 pdf 返回过来,在浏览器里新开个页面预览,再打印

jQuery.print.js 可以直接支持预览

SoDiaoEditor-4.0 找到这个开源电子病历模板,
但是和 python 配合开发还是没想到实现方式,续打和多页打印还是没头绪
这个有好多接口,但是在续打方面不知道如何实现。

导出 xml 不好使,谷歌浏览器下面如何执行他们的命令显示 xml 内容
我在谷歌 console 里面执行 exportXML ()报错:not defined

回到顶部