网页打印很简单!用web打印插件lodop轻松实现文件打印
最近,给客户发一个事件提醒软件,其中客户要求实现打印功能,因为是用asp.net mvc 开发首先考虑到用水晶报表来实现(crystalReport),以前开发c# winform程序,感觉水晶报表还是蛮好的,但自从使用asp.net mvc 开发,感觉不是很友好,无意中看到有一个支持web(网页打印)的打印插件lodop,打开官网,发现该软件比较正规,网上评价也是比较好,抱着试试看的态度,去官方网站:Lodop和C-Lodop官网主站,下载并安装。根据官方文档,并结合自己的经验,特分享如下:
网页效果如图:

实现的打印效果图示如下:

很是干净和整洁。非常漂亮!
登录官网(Lodop和C-Lodop官网主站),下载相关安装文件:

安装包如下,根据图示安装:

本人在c# asp.net mvc 下测试,读者可以根据自己熟悉的语言对号入座。分享代码如下:
1.当然首先在vs2022中的工程项目界面要引入,LodopFuncs.js

2.部分代码如下:
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title><script language="javascript" src="LodopFuncs.js"></script>
</head>
<body><form id="form1"><table border="1" width="300" id="tb01" bgcolor="#CCFFCC" style="border: solid 1px black; border-collapse: collapse"><tr><td width="133" id="mtb001"><font face="黑体" color="#FF0000" size="3"><u> 《表单一》 </u></font></td></tr></table><table border="1" width="300" height="106" cellspacing="0" bgcolor="#CCFFFF" style="border-collapse: collapse; table-layout: fixed; border: solid 1px black;"><tr><td width="66" height="16" style="border: solid 1px black"><font color="#0000FF">A</font><font color="#0000FF">等</font></td><td width="51" height="16" style="border: solid 1px black"><font color="#0000FF">B</font><font color="#0000FF">等</font></td><td width="51" height="16" style="border: solid 1px black"><font color="#0000FF">C</font><font color="#0000FF">等</font></td></tr><tr><td width="66" height="16" style="border: solid 1px black">A<sub>01</sub></td><td width="80" height="12" style="border: solid 1px black">中-001</td><td width="51" height="12" style="border: solid 1px black">C1<sup>x</sup></td></tr><tr><td width="66" height="16" style="border: solid 1px black">A<sub>02</sub>Φ</td><td width="80" height="16" style="border: solid 1px black">日-スの</td><td width="51" height="16" style="border: solid 1px black"><font face='Vernada'>7㎥</font></td></tr><tr><td width="66" height="16" style="border: solid 1px black; overflow: hidden">A<sub>03</sub><nobr>over隐藏后面的:1234567890</nobr></td><td width="80" height="16" style="border: solid 1px black; overflow: hidden">韩-안녕</td><td width="51" height="16">C3<sup>x</sup></td></tr></table></form>若只打印《表单一》,看一下<a href="javascript:prn1_preview()">打印预览</a>,可<a href="javascript:prn1_print()">直接打印</a>也可 <script language="javascript" type="text/javascript"> var LODOP; //声明为全局变量 function prn1_preview() {CreateOneFormPage();LODOP.PREVIEW();};function prn1_print() {CreateOneFormPage();LODOP.PRINT();};function prn1_printA() {CreateOneFormPage();LODOP.PRINTA();};function CreateOneFormPage() {LODOP = getLodop();LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_表单一");LODOP.SET_PRINT_STYLE("FontSize", 18);LODOP.SET_PRINT_STYLE("Bold", 1);LODOP.ADD_PRINT_TEXT(50, 231, 260, 39, "打印页面部分内容");LODOP.ADD_PRINT_HTM(88, 200, 350, 600, document.getElementById("form1").innerHTML);};function prn2_preview() {CreateTwoFormPage();LODOP.PREVIEW();};function prn2_manage() {CreateTwoFormPage();LODOP.PRINT_SETUP();};function CreateTwoFormPage() {LODOP = getLodop();LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_表单二");LODOP.ADD_PRINT_RECT(70, 27, 634, 242, 0, 1);LODOP.ADD_PRINT_TEXT(29, 236, 279, 38, "页面内容改变布局打印");LODOP.SET_PRINT_STYLEA(2, "FontSize", 18);LODOP.SET_PRINT_STYLEA(2, "Bold", 1);LODOP.ADD_PRINT_HTM(88, 40, 321, 185, document.getElementById("form1").innerHTML);LODOP.ADD_PRINT_HTM(87, 355, 285, 187, document.getElementById("form2").innerHTML);LODOP.ADD_PRINT_TEXT(319, 58, 500, 30, "注:其中《表单一》按显示大小,《表单二》在程序控制宽度(285px)内自适应调整");};function prn3_preview() {LODOP = getLodop();LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_全页");LODOP.ADD_PRINT_HTM(0, 0, "100%", "100%", document.documentElement.innerHTML);LODOP.PREVIEW();};</script>
</body>
</html>
3.考虑到部分读者可能看不懂,补充完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>WEB打印控件LODOP的样例二:打印当前页面的内容</title>
<meta name="keywords" content="Lodop、Lodop打印控件、WEB打印、C-Lodop、CLodop、lodop控件、云打印、手机打印、免费、AO打印">
<meta name="description" content="Lodop、Lodop打印控件、WEB打印、C-Lodop、CLodop、lodop控件、云打印、手机打印、免费、AO打印">
<script language="javascript" src="LodopFuncs.js"></script>
</head>
<body>
<iframe src="https://help.lodop.net:8143/k_hlp?type=url&fid=DA" width="500" height="46" frameborder="0" scrolling="no" style="float:right;background:inherit;"></iframe>
<h2><font color="#009999">演示如何打印当前页面的内容:</font>
</h2>
<form id="form1"><table border="1" width="300" id="tb01" bgcolor="#CCFFCC" style="border:solid 1px black;border-collapse:collapse"><tr><td width="133" id="mtb001"><font face="黑体" color="#FF0000" size="3"><u> 《表单一》 </u></font></td></tr></table><table border="1" width="300" height="106" cellspacing="0" bgcolor="#CCFFFF"style="border-collapse:collapse;table-layout:fixed;border:solid 1px black;"><tr><td width="66" height="16" style="border:solid 1px black"><font color="#0000FF">A</font><font color="#0000FF">等</font></td>
<td width="51" height="16" style="border:solid 1px black"><font color="#0000FF">B</font><font color="#0000FF">等</font></td>
<td width="51" height="16" style="border:solid 1px black"><font color="#0000FF">C</font><font color="#0000FF">等</font></td></tr>
<tr>
<td width="66" height="16" style="border:solid 1px black">A<sub>01</sub></td>
<td width="80" height="12" style="border:solid 1px black">中-001</td>
<td width="51" height="12" style="border:solid 1px black">C1<sup>x</sup></td>
</tr>
<tr>
<td width="66" height="16" style="border:solid 1px black">A<sub>02</sub>Φ</td>
<td width="80" height="16" style="border:solid 1px black">日-スの</td>
<td width="51" height="16" style="border:solid 1px black"><font face='Vernada'>7㎥</font></td>
</tr> <tr><td width="66" height="16" style="border:solid 1px black;overflow:hidden">A<sub>03</sub><nobr>over隐藏后面的:1234567890</nobr>
</td><td width="80" height="16" style="border:solid 1px black;overflow:hidden">韩-안녕</td><td width="51" height="16">C3<sup>x</sup>
</td></tr> </table>
</form>
<br>
<div id="form2"><table border="1" width="100%" id="tb01" bgcolor="#CCFFCC" style="border:solid 1px black;border-collapse:collapse"><tr><td width="133" id="mtb001"><font face="黑体" color="#FF0000" size="3">《表单二》©</font></td></tr></table><table border="1" width="100%" height="106" cellspacing="0" bgcolor="#CCFFFF" style="border:solid 1px black;border-collapse:collapse"><tr><td width="66" height="16" style="border:solid 1px black"><font color="#0000FF">X</font><font color="#0000FF">等</font></td>
<td width="51" height="16" style="border:solid 1px black"><font color="#0000FF">Y等</font></td>
<td width="51" height="16" style="border:solid 1px black"><font color="#0000FF">Z等</font></td></tr> <tr><td width="66" height="12" style="border:solid 1px black"><span style="font-family:Wingdings;font-size:25px;" >þ</span>X001</td>
<td width="51" height="12" style="border:solid 1px black"><strike>Y001</strike></td>
<td width="51" height="44" rowspan="3" style="border:solid 1px black"><ol style="list-style-type:upper-alpha;list-style-position:inside;"><li>Z001</li><li>Z002</li><li>Z003</li><li>Z004</li><li>Z005</li></ol></td></tr>
<tr><td width="30%" height="16" style="border:solid 1px black"><strong>X002</strong></td>
<td width="51" height="16" style="border:solid 1px black"><u>Y002</u><span style="visibility: hidden">hidesome</span></td></tr> <tr><td width="30%" height="16" style="border:solid 1px black"><span style="text-decoration: overline">X003</span>
</td><td width="40%" height="16" style="border:solid 1px black"><em>Y003</em><input type="radio" name="R1"><input type="radio" name="R1" checked></td></tr> </table>
</div>
<p>1:若只打印《表单一》,看一下<a href="javascript:prn1_preview()">打印预览</a>,可<a href="javascript:prn1_print()">直接打印</a>也可
<a href="javascript:prn1_printA()">选择打印机</a>打印。<br><br>
2:若《表单一》和《表单二》一起并列输出,看一下<a href="javascript:prn2_preview()">打印预览</a>,其布局风格可<a href="javascript:prn2_manage()">打印维护</a>调整。
<p>3:若打印整个页面,看看<a href="javascript:prn3_preview()">打印预览</a>。<br><br>
本例要点是用Document的innerHTML方法把打印目标的超文本送给控件。
<p><a href="../LodopDemo.html"><<回样例目录</a>
</p>
<script language="javascript" type="text/javascript"> var LODOP; //声明为全局变量 function prn1_preview() { CreateOneFormPage(); LODOP.PREVIEW(); };function prn1_print() { CreateOneFormPage();LODOP.PRINT(); };function prn1_printA() { CreateOneFormPage();LODOP.PRINTA(); }; function CreateOneFormPage(){LODOP=getLodop(); LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_表单一");LODOP.SET_PRINT_STYLE("FontSize",18);LODOP.SET_PRINT_STYLE("Bold",1);LODOP.ADD_PRINT_TEXT(50,231,260,39,"打印页面部分内容");LODOP.ADD_PRINT_HTM(88,200,350,600,document.getElementById("form1").innerHTML);}; function prn2_preview() { CreateTwoFormPage(); LODOP.PREVIEW(); };function prn2_manage() { CreateTwoFormPage();LODOP.PRINT_SETUP(); }; function CreateTwoFormPage(){LODOP=getLodop(); LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_表单二");LODOP.ADD_PRINT_RECT(70,27,634,242,0,1);LODOP.ADD_PRINT_TEXT(29,236,279,38,"页面内容改变布局打印");LODOP.SET_PRINT_STYLEA(2,"FontSize",18);LODOP.SET_PRINT_STYLEA(2,"Bold",1);LODOP.ADD_PRINT_HTM(88,40,321,185,document.getElementById("form1").innerHTML);LODOP.ADD_PRINT_HTM(87,355,285,187,document.getElementById("form2").innerHTML);LODOP.ADD_PRINT_TEXT(319,58,500,30,"注:其中《表单一》按显示大小,《表单二》在程序控制宽度(285px)内自适应调整");}; function prn3_preview(){LODOP=getLodop(); LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_全页");LODOP.ADD_PRINT_HTM(0,0,"100%","100%",document.documentElement.innerHTML);LODOP.PREVIEW(); };
</script> </body>
</html>
如果错误,请斧正!谢谢!
相关文章:
网页打印很简单!用web打印插件lodop轻松实现文件打印
最近,给客户发一个事件提醒软件,其中客户要求实现打印功能,因为是用asp.net mvc 开发首先考虑到用水晶报表来实现(crystalReport),以前开发c# winform程序,感觉水晶报表还是蛮好的,但…...
北京迅为iTOP-RK3568开发板OpenHarmony系统南向驱动开发实操-HDF驱动配置LED
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
C语言函数全解析 | 零基础入门指南
📚 C语言函数全解析 | 零基础入门指南 📑 目录 🌟 什么是函数?🔧 函数的定义与结构⚙️ 函数参数与返回值💡 函数声明与调用🏁 Main函数详解🚀 实战案例演示 1. 什么是函数 功能单…...
驻场运维服务方案书(Word文件)
目 录 第一章 背景分析 1.1. 项目背景 1.2. 项目目标 1.3. 系统现状 1.3.1. 网络系统 1.3.2. 设备清单梳理 1.3.3. 应用系统 第二章 需求分析及理解 2.1. 在重要日期能保障信息系统安全 2.2. 信息系统可长期安全、持续、稳定的运行 2.3. 提升发现安全问题、解决安全…...
【时时三省】(C语言基础)用printf函数输出数据2
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 格式字符 在输出时,对不同类型的数据要指定不同的格式声明,而格式声明中最重要的内容是格式字符。常用的有以下几种格式字符。 ( 1 ) d格式符。用来输出一个有符号的…...
django框架 [面试篇]
Django 是一个基于 Python 的web框架,遵循"快速开发,不重复造轮子(dont repeat yourself)"的原则,帮助用户构建web应用。 而 Django 它本身提供了一些全栈式的一些组件,包括了 ORM,模板引擎,表单…...
吴恩达机器学习笔记复盘(三)Jupyter NoteBook
Jupyter NoteBook Jupyter是一个开源的交互式计算环境: 特点 交互式编程:支持以单元格为单位编写和运行代码,用户可以实时看到代码的执行结果,便于逐步调试和理解代码逻辑。多语言支持:不仅支持Python,还…...
【Docker项目实战】使用Docker部署serverMmon青蛇探针(详细教程)
【Docker项目实战】使用Docker部署serverMmon青蛇探针 一、serverMmon介绍1.1 serverMmon 简介1.2 主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载serverMmon镜像五、…...
信息学奥赛一本通 1449:【例题2】魔板
题目 1449:【例题2】魔板 分析 首先注意:输入是按顺时针给出的,但我们处理时需要按正常顺序排,可以用以下代码读入 string s(8, 0); // 初始化全零字符串 cin>>s[0]>>s[1]>>s[2]>>s[3]; cin>>…...
Linly-Talker:开源数字人框架的技术解析与影响
一、引言:AI 数字人的发展趋势 近年来,数字人(Digital Human) 技术迅速发展,从最早的 2D 虚拟主播,到如今能够进行实时交互的 3D 智能助手,AI 在多模态交互领域的应用愈发广泛。各大互联网公司…...
你的完美主义:从缺陷到超能力
所属专栏:《逻辑辨证系列》 前情回顾: 《完美还是完成》(一):完成还是完美—完成大于完美 时间、机会、情绪成本 先完成 … 本期: 《完美还是完成》(二):你的完美主…...
Java 8 + Tomcat 9.0.102 的稳定环境搭建方案,适用于生产环境
一、安装 Java 8 安装 OpenJDK 8 bash sudo apt update sudo apt install openjdk-8-jdk -y 验证安装 bash java -version 应输出类似: openjdk version “1.8.0_412” OpenJDK Runtime Environment (build 1.8.0_412-8u412-ga-1~22.04-b08) OpenJDK 64-Bit Server VM (bui…...
Java基础关键_021_集合(五)
目 录 一、HashMap 1.key 存储自定义类型 2.Hash 表存储原理 3.重写 hashCode 和 equals 方法 4.key 为 null 5.jdk 8 后新特性 (1)初始化时 (2)插入 (3)数据结构 6.容量 二、LinkedHashMap 1.…...
mcp 是一种什么协议,怎么构建mcpserver,怎么实现多智能体的调用
MCP(Message Control Protocol)是一种用于分布式系统中多智能体通信的协议框架,特别适合于构建多智能体系统。下面我将介绍MCP协议的基本原理以及如何构建MCP服务器和实现多智能体调用。 MCP协议概述 MCP协议主要用于定义智能体之间如何交换…...
Nginx的流式响应配置详解
现在大模型场景繁多,项目中涉及nginx转发大模型的流式数据时,需配置nginx的转发策略: location /streaming {proxy_pass http://backend_server;proxy_cache off; # 关闭缓存proxy_buffering off; # 关闭代理缓冲chunked_transfer_encoding …...
windows10 清理 C 盘
系统自带功能清理 磁盘清理:右键单击 C 盘,选择“属性” ,点击“磁盘清理” ,系统会开始扫描可清理的文件,如临时文件、回收站文件、系统更新备份文件等。扫描完成后,勾选想要清理的文件类型,点…...
浅谈Linux中的Shell及其原理
浅谈Linux中的Shell及其原理 Linux中Shell的运行原理github地址前言一、Linux内核与Shell的关系1.1 操作系统核心1.2 用户与内核的隔离 二、Shell的演进与核心机制2.1 发展历程2.2 核心功能解析2.3 shell的工作流程1. 用户输入命令2. 解析器拆分指令3. 扩展器处理动态内容变量替…...
ARM内部寄存器与常用汇编指令(ARM汇编)
1 地址空间&RISC与CISC CISC:复杂指令集计算机 RISC:精简指令集计算机 RISC 与 CISC 的比较 2 ARM内部寄存器 3 ARM汇编概述 RISC精简指令可以大致分为几类: 1.内存读写 2.运算 3.跳转/分支 4.比较 而指令的集合就称之为“指令集”…...
【QT5 Widgets示例】Model/View编程初探
文章目录 Model/ViewModel/View编程的优点常见Model类和View类Model/View应用程序示例只读的表格修改文本外观显示变化的数据设置表格标头可编辑视图示例树结构视图示例获取视图选中项 Model/View Model/View编程的优点 Model/View编程介绍:https://doc.qt.io/qt-…...
一键优化右键菜单,高效又清爽!
打工人们你们好!这里是摸鱼 特供版~ 电脑右键菜单杂乱无章,常用功能被淹没?图标显示异常、打印出错让人手足无措?别担心,Easy Context Menu来帮你!这是一款右键菜单管理工具,能快速清理不必要的…...
排查数据库的正在执行的占用的慢sql语句,可以查看生产的执行sql语句时间
1. 生产报错异常: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: master - Interrupted during connection acquisition2.在数据库执行查询生…...
Java泛型程序设计使用方法
Java泛型程序设计是Java语言中一项强大的特性,它允许你编写更加通用和类型安全的代码。以下是Java泛型程序设计的使用方法和技巧: 1. 基本概念 泛型类:可以定义一个类,其中的某些类型是参数化的。 public class Box<T> {pr…...
成绩排序(结构体排序)
成绩排序 #include<stdio.h> #include<stdlib.h> struct student{char name[50];int score;int order; }; int flag; int cmp(const void *a,const void *b){struct student *s1(struct student*)a;struct student *s2(struct student*)b;if(s1->scores2->…...
【redis】lua脚本
在分布式系统与高并发架构的战场中,开发者们始终在与两个永恒的命题博弈:数据一致性与系统性能。当我们试图用Redis构建高速缓存、实现分布式锁或设计秒杀系统时,往往会陷入这样的困境——如何在保证原子性的同时,避免网络往返带来…...
Oracle中的INHERIT PRIVILEGES权限
Oracle中的INHERIT PRIVILEGES权限 存储过程和用户函数的AUTHID属性调用者权限vs定义者权限一个简单的示例INHERIT PRIVILEGES权限的含义INHERIT PRIVILEGES权限的安全隐患注意到Oracle 19c数据库中有如下权限信息: SQL> select grantor,grantee,table_name,privilege fro…...
Kafka相关的面试题
以下是150道Kafka相关的面试题及简洁回答: Kafka基础概念 1. 什么是Kafka? Kafka是一个分布式、可扩展、容错的发布-订阅消息系统,最初由LinkedIn开发,现为Apache项目。它适用于高吞吐量的场景,如大数据处理和实时数据…...
OpenHarmony-XTS测试
OpenHarmony-XTS测试 OpenHarmony-XTS测试环境搭建测试准备开始运行PS OpenHarmony-XTS测试 针对OpenHarmony版本进行XTS测试使用记录。 windows环境。 以acts套件为例。 环境搭建 获取测试套件,两种方法 1)官网下载:https://www.openharm…...
【物联网-WIFI】
物联网-WIFI ■ ESP32-C3-模块简介■ ESP32-C3-■ ESP32-C3-■ WIFI-模组■ WIFI-■ WIFI- ■ ESP32-C3-模块简介 ■ ESP32-C3- ■ ESP32-C3- ■ WIFI-模组 ■ WIFI- ■ WIFI-...
作业9 (2023-05-05 数组的定义和初始化)
第1题/共11题【单选题】 关于一维数组初始化,下面哪个定义是错误的?( ) A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5,6}; C.int arr[] = (1,2,3,4,5,6); D.int arr[10] = {0}; A:正确,10个int的一段连续空间,前6个位置被初始化为1,2,3,4,5,6,其他…...
C语言中的流程控制语句
一.流程控制语句的分类: 1.顺序结构 概念:从上往下依次执行,也是程序默认的执行顺序 2.分支结构 概念:程序在执行的过程中出现了岔路(我们只能选择一条支线进行执行) (1).if语句…...
