Python 开发中:web 打印现在有没有好的实现方式,支持分页打印吗?
想咨询下现在 web 有好的方式实现常规打印没? print css 各浏览器现在支持的还是不怎么好?
我现在想把多页内容显示在一个 html 页面,打印的时候支持单独打印,续打(如果编辑内容不足一页,在下次增加输入内容后,可以续打之后的内容),双面打印。
续打实现方式,我设想把原来内容设置为白色,新增内容设置为黑色,这样就可以在普通 a4 纸上实现续打功能了。
Python 开发中:web 打印现在有没有好的实现方式,支持分页打印吗?
还不如在后台生成然后让用户下载, 不然你会被浏览器的兼容性搞死
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

