Java如何实现网页打印
- 后端开发
- 2025-07-04
- 6
核心实现思路
- 后端:生成打印内容(HTML/PDF格式)
- 前端:调用浏览器打印接口(window.print())
- 样式控制:通过CSS定义打印专用样式
具体实现方法
方法1:纯前端打印(简单场景)打印,直接调用浏览器功能:
<button onclick="window.print()">打印页面</button> <!-- 隐藏非打印区域 --> <style> @media print { .no-print { display: none; } /* 隐藏不需要打印的元素 */ body { font-size: 12pt; } /* 调整打印字体 */ } </style>
方法2:后端生成HTML模板打印
步骤:
-
Java生成动态HTML
// Spring Boot示例 @GetMapping("/print/receipt") public String getReceipt(Model model) { model.addAttribute("orderNo", "2025-12345"); model.addAttribute("items", Arrays.asList("商品A", "商品B")); return "print-template"; // 返回Thymeleaf/FreeMarker模板 } -
HTML模板(print-template.html)
<div class="print-area"> <h2>订单号: [[${orderNo}]]</h2> <ul> <li th:each="item : ${items}" th:text="${item}"></li> </ul> </div>
“`
方法3:后端生成PDF打印(推荐)
使用库:
- Apache PDFBox
- iText
- 推荐方案: Flying Saucer(将HTML转PDF)
示例代码:

// Flying Saucer + Thymeleaf public void generatePdf(HttpServletResponse response) throws Exception { // 1. 渲染HTML Context ctx = new Context(); ctx.setVariable("content", "打印内容"); String html = templateEngine.process("template", ctx); // 2. 转换PDF OutputStream out = response.getOutputStream(); ITextRenderer renderer = new ITextRenderer(); renderer.setDocumentFromString(html); renderer.layout(); renderer.createPDF(out); // 3. 设置响应头 response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "inline; filename=print.pdf"); out.close(); }
前端调用:
<a href="/generate-pdf" target="_blank">打印PDF</a> <!-- 浏览器自动打开打印预览 -->
高级功能实现
打印分页控制
@media print { .page-break { page-break-after: always; /* 强制分页 */ } }
页眉页脚
@page { @top-center { content: "公司名称"; } @bottom-right { content: "页码 " counter(page); } }
二维码打印(结合Java)
// 使用ZXing生成二维码 String qrUrl = "https://example.com/order123"; BufferedImage qrCode = new QRCodeWriter().encode(qrUrl, BarcodeFormat.QR_CODE, 200, 200); // 将图片插入HTML模板
避坑指南
-
样式失效问题

- 打印样式必须用@media print
- 避免使用Flex/Grid布局(部分浏览器不支持打印)
-
跨浏览器兼容
- 测试Chrome/Firefox/Edge
- Safari需启用打印背景色: -webkit-print-color-adjust: exact;
-
安全限制
- 浏览器可能拦截弹窗,需用户主动触发打印操作
- PDF文件建议用inline模式而非下载
- Apache PDFBox:PDF生成库
- Flying Saucer:HTML转PDF工具
- PrintCSS:打印样式标准参考
- Paged.js:高级打印布局方案(开源)
方案选型建议
场景 推荐方案 简单页面打印 纯前端window.print() 动态数据报表 后端HTML模板+打印样式 格式严格的合同/票据 后端生成PDF 专业提示:银行/医院等系统推荐使用PDF方案,确保打印格式零误差。
引用说明: