当前位置: 首页 > news >正文

C# aspose word实现模板方式打印及打印速度慢解决方法

1.引用dll

nuget或者网上都有下载的方式。不过都要收费。下载地址:https://files.cnblogs.com/files/rolayblog/Tool.zip?t=1713322422&download=true

2.打印模板设计

新建一个doc文档,根据自己的需求画页面。

A、普通文本

在word中需要替换值的地方添加书签,插入>书签,书签名字最好是值的关键字。

 B、图片,图片的方式和普通文本一样,使用书签占位。

C、表格,实际业务中,肯定会有拿到一个list动态把所有的数据渲染到表格上面,一组数据一行。这时候需要用到域。(office)插入>文档部件>域

 找到MergeField,aspose中会用TableStart和TableEnd来确定table域的工作范围,开始和结束,其中数据集合的命名放在start和end之后,类似于:TableStart:userList,这个非常重要,然后表格中每个需要填充的数据都要加上域,

域名和书签类似,使用关键字即可。我这边的配置结果如下:

 3、数据填充

A、模板文档加载

  string tempFile = System.Windows.Forms.Application.StartupPath + "/temp/tempA4.docx";
Document doc = new Document(tempFile);

B、普通文本填充

Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("address", item.address);dic.Add("age", patient.age);
foreach (var key in dic.Keys)   //循环键值对{builder.MoveToBookmark(key);  //将光标移入书签的位置builder.Write(dic[key]);   //填充值}

C、图片填充

builder.InsertImage(imgData);

D、表格数据填充

 DataTable userTable = new DataTable("list");userTable.Columns.Add(new DataColumn("sortIndex", typeof(int)));userTable.Columns.Add("checkItemName");userTable.Columns.Add("appointmentTime");userTable.Columns.Add("address");userTable.Columns.Add("itemNotice");userTable.Rows.Add(1, "腹部超声检查", "2024年5月2日 11:00-12:00", "三楼骨科", "我是一个注意事项");userTable.Rows.Add(2, "腹部超声检查2", "2024年5月2日 11:00-12:002", "三楼骨科2", "我是一个注意事项2");userTable.Rows.Add(2, "腹部超声检查2", "2024年5月2日 11:00-12:002", "三楼骨科2", "我是一个注意事项2");userTable.Rows.Add(2, "腹部超声检查2", "2024年5月2日 11:00-12:002", "三楼骨科2", @"1、病人先挂号、看病、医生开出CT和 MRI申请单,可以医生诊间预约。 
2、请于申请当日到自助机缴费或收费窗口交费,到3号二楼检查集中预约中心预约。 
3、检查当日持预约申请单提前10 - 15分钟到规定检查室前确认后进行检查。 
6、检查完毕后,按规定时间持取片卡号,到CT MRI登记室取片及结果。 ");userTable.Rows.Add(2, "腹部超声检查2", "2024年5月2日 11:00-12:002", "三楼骨科2", @"1、病人先挂号、看病、医生开出CT和 MRI申请单,可以医生诊间预约。 
2、请于申请当日到自助机缴费或收费窗口交费,到3号二楼检查集中预约中心预约。 
3、检查当日持预约申请单提前10-15分钟到规定检查室前确认后进行检查。 
6、检查完毕后,按规定时间持取片卡号,到CT MRI登记室取片及结果。 ");userTable.Rows.Add(2, "腹部超声检查2", "2024年5月2日 11:00-12:002", "三楼骨科2", "我是一个注意事项2");DataSet dataSet = new DataSet();dataSet.Tables.Add(userTable);doc.MailMerge.ExecuteWithRegions(dataSet);

以上就是模板处理的方式和代码。

3、aspose word Document 内置实现了print方法,调用windows的打印方法,用过这个的应该都知道每次第一次打印的时候都要等几秒,有时候长达五秒,因为我这里是浏览器打开exe打印,每次打印完成后关闭exe。等于是每次都是重新打开。每次都很慢。

4、我这边实现了一个socket服务端,这个服务端来负责打印,而浏览器打开的exe只负责拿到参数,把参数发送和socket服务端后就可以自己关闭了,socket服务端拿到数据就打印,这样只有第一次打开的时候需要五秒,后面基本1秒足左右都能打印出来。

5、sockt服务端代码

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace PrintService
{public class TcpServer{private TcpListener tcpListener;private Thread listenThread;private TcpClient tcpClient;public TcpServer(int port){IPAddress ipAddress = IPAddress.Any;tcpListener = new TcpListener(ipAddress, port);}public void Start(){tcpListener.Start();Console.WriteLine("服务端已启动,等待客户端连接...");listenThread = new Thread(new ThreadStart(ListenForClients));listenThread.Start();}public void sendMessage() {if (tcpClient.Connected) {string heartbeatMessage = "suncess";byte[] heartbeatData = Encoding.ASCII.GetBytes(heartbeatMessage);// 发送消息给客户端tcpClient.GetStream().Write(heartbeatData, 0, heartbeatData.Length);}}private void ListenForClients(){while (true){TcpClient client = tcpListener.AcceptTcpClient();Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientCommunication));clientThread.Start(client);}}private void HandleClientCommunication(object client){tcpClient = (TcpClient)client;string clientEndPoint = tcpClient.Client.RemoteEndPoint.ToString();Console.WriteLine("客户端 {0} 已连接。", clientEndPoint);NetworkStream clientStream = tcpClient.GetStream();byte[] buffer = new byte[4096];while (true){try{int bytesRead = clientStream.Read(buffer, 0, buffer.Length);if (bytesRead == 0){Console.WriteLine("客户端 {0} 已断开连接。", clientEndPoint);break;}string recvStr = Encoding.UTF8.GetString(buffer, 0, bytesRead);Task t = new Task(() =>{PrintDataUtil.DoPrint(recvStr);});t.Start();}catch (Exception ex){Console.WriteLine("与客户端 {0} 的连接发生异常: {1}", clientEndPoint, ex.Message);break;}}tcpClient.Close();}}
}
socket服务端

6、socket服务端使用

 TcpServer tcpServer = new TcpServer(6879);tcpServer.Start();

7、sokcet客户端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;namespace AutoPrint
{public class MyTcpClient{private TcpClient tcpClient;public MyTcpClient(){}public void Connect(string ipAddress, int port){tcpClient = new TcpClient();tcpClient.Connect(IPAddress.Parse(ipAddress), port);Console.WriteLine("与服务端连接成功!");}public void SendMessage(string message){if (tcpClient.Connected){byte[] messageData = Encoding.ASCII.GetBytes(message);tcpClient.GetStream().Write(messageData, 0, messageData.Length);}}public void CloseConnect() {if (tcpClient.Connected) {tcpClient.Close();}}}
}
socket客户端代码

8、sokcet客户端使用

 public Form1(string[] args){InitializeComponent();MyTcpClient myTcpClient = new MyTcpClient();try{int startIndex = args[0].IndexOf("$");string paramStr = "";if (startIndex >= 0 && startIndex < args[0].Length){paramStr = args[0].Substring(startIndex).Replace("$", "").Replace("/", ""); // 从"$"后面的位置开始截取到字符串结束  myTcpClient.Connect("127.0.0.1", 6879);myTcpClient.SendMessage(paramStr);}else{MessageBox.Show("无效参数!");System.Environment.Exit(0);return;}}finally {Thread.Sleep(500);myTcpClient.CloseConnect();this.Close();System.Environment.Exit(0);}}
socket客户端使用

相关文章:

C# aspose word实现模板方式打印及打印速度慢解决方法

1.引用dll nuget或者网上都有下载的方式。不过都要收费。下载地址&#xff1a;https://files.cnblogs.com/files/rolayblog/Tool.zip?t1713322422&downloadtrue 2.打印模板设计 新建一个doc文档&#xff0c;根据自己的需求画页面。 A、普通文本 在word中需要替换值的地方添…...

java纯文字游戏

java纯文字小游戏 package Test2;import java.util.Random;public class Role {private String name ;private int blood;private char gender;private String face;public Role() {}public Role(String name, int blood) {this.name name;this.blood blood;}public String …...

mac IDEA激活 亲测有效

1、官网下载mac版本IDEA并安装 2、打开激活页面 3、下载脚本文件 链接: https://pan.baidu.com/s/1I2BqdfxSJv1A96422rflnA?pwdm494 提取码: m494 4、命令行到该界面&#xff0c;执行 sudo bash idea.sh 可能出现的问题&#xff1a; 查看sh文件&#xff0c;targetFilePath…...

视频怎么去水印,轻松去视频水印的方法

视频水印是为了提高视频的版权保护能力&#xff0c;防止视频被盗用或者不正当使用&#xff0c;但另一方面会破坏视频的流畅度和清晰度&#xff0c;很影响视觉观感和后续创作。想要去除视频水印&#xff0c;下面三种方法你必须得知道&#xff0c;赶紧看过来~ 1、使用美图秀秀(A…...

vue3+element+AntDesign(自动导入)+pina+vite+js+pnpm搭建项目框架

vue3elementAntDesign(自动导入)pinavitejspnpm搭建项目框架 文章目录 vue3elementAntDesign(自动导入)pinavitejspnpm搭建项目框架1. 安装pnpm&#xff1a;通过以下命令安装pnpm&#xff0c;它是一个快速、零配置的包管理工具。2. 初始化项目&#xff1a;在命令行中执行以下命…...

Android Studio XML 预览View 底部移动到右边

以前 XML 的预览都是在右边的&#xff0c;最近不知道为什么突然到下面去了&#xff0c;很不习惯 找半天想把 预览view 移动到右边&#xff0c;一直没找到按钮。 误打误撞移回来了&#xff0c;原来只要再点击一次 split&#xff0c;就可以变动位置了&#xff0c;记录一下。...

计算机网络——实现smtp和pop3邮件客户端

实验目的 运用各种编程语言实现基于 smtp 协议的 Email 客户端软件。 实验内容 1. 选择合适的编程语言编程实现基于 smtp 协议的 Email 客户端软件。 2. 安装 Email 服务器或选择已有的 Email 服务器&#xff0c;验证自己的 Email 客户端软件是否能进行正常的 Email 收发功…...

【Spring】面试题汇总

Spring1. 什么是 Spring 框架?2. 谈谈你对于 Spring IoC 的了解3. 什么是依赖注入4. Spring的依赖注入有几种方式5. 将一个类声明为 Bean 的注解有哪些?6. Component 和 Bean 的区别是什么&#xff1f;7. 注入 Bean 的注解有哪些&#xff1f;8. Bean 的作用域有哪些?9. Bean…...

thinkphp6入门(23)-- 如何导入excel

1. 安装phpexcel composer require phpoffice/phpexcel composer update 2. 前端 <form class"forms-sample" action"../../xxxx/xxxx/do_import_users" method"post" enctype"multipart/form-data"><div class"cont…...

【数据结构3-栈和队列】

数据结构3-栈和队列 1 栈-特殊的线性表-先进后出1.1 栈的三个案例 2 队列-与栈相反-先进先出2.1 队列的案例 3 用C实现栈的代码&#xff1a;4 用C实现队列的代码 1 栈-特殊的线性表-先进后出 1.1 栈的三个案例 2 队列-与栈相反-先进先出 2.1 队列的案例 3 用C实现栈的代码&…...

STL--list双向链表

功能 将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a;链表由一系列结点组成 结点的组成&#xff1a;一个是存储数据元素的数据域&#xff0…...

ElasticSearch入门篇

简介 ElasticSearch简介&#xff1a;简称为es&#xff0c; es是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。es也使用Java开发并使用Lucene…...

MAXHUB会议解决方案持续进化,以“高效”为核心推动行业发展

4月16日&#xff0c;MAXHUB 2024新品发布会在视源股份&#xff08;002841&#xff09;北京产业园圆满举行。本次发布会以“智会融合 进化不止”为主题&#xff0c;首发MAXHUB高效会议解决方案&#xff0c;以AI智能、开放兼容、场景化交付为方向&#xff0c;为用户提供高效、便捷…...

CentOS 7安装Redis

说明&#xff1a;本文介绍如何在CentOS 7操作系统下安装Redis 下载安装 首先&#xff0c;去官网上下载所需要安装的版本&#xff0c;官网地址&#xff1a;https://download.redis.io/releases/&#xff0c;我这里下载3.2.1版本的 下载完&#xff0c;上传到云服务器上&#xf…...

Kubernetes (K8s) 部署前后端分离项目

要使用Kubernetes (K8s) 部署一个涵盖Django后端、Vue前端、Redis、Nginx、RabbitMQ和MySQL的前后端分离项目,需要遵循以下步骤。这个过程涉及创建和配置多个资源,包括部署(Deployments)、服务(Services)、配置映射(ConfigMaps)、密钥(Secrets)和Ingress规则。 大纲…...

MLT媒体程序框架01:概述

MLT官网 概述 MLT是一个开源的多媒体框架&#xff0c;专为电视广播而设计和开发。它为广播公司、视频编辑器、媒体播放器、转码器、网络流媒体和更多类型的应用程序提供了一个工具包。该系统的功能是通过各种现成的工具、XML创作组件和基于API的可扩展插件提供的。 它是通过…...

9【原型模式】复制一个已存在的对象来创建新的对象

你好&#xff0c;我是程序员雪球。 今天我们来学习23种设计模式之原型模式&#xff0c;在平时开发过程中比较少见。我带你了解什么是原型模式&#xff0c;使用场景有哪些&#xff1f;有什么注意事项&#xff1f;深拷贝与浅拷贝的区别&#xff0c;最后用代码实现一个简单的示例…...

谷粒商城实战(013 业务-认证服务-短信验证)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第211p-第p219的内容 介绍 认证中心要集成 社交登录、OAuth2.0、单点登录 等功能 OAuth 2.0&#xff1a; 问题解决&#xff1a; OAuth 2.0 主要…...

Unity中支持泰语--没有版权限制

在Unity中支持泰语主要涉及以下几个方面&#xff1a; 选择合适的字体&#xff1a;在Unity中&#xff0c;确保使用支持泰文字符的字体是至关重要的。例如&#xff0c;可以选择使用Noto Serif Thai字体&#xff0c;这是一个支持泰语的字体2。 处理Unity版本问题&#xff1a;某些…...

C语言传统垃圾收集器的缺陷以及我的思路

传统的比如Boehm回收器&#xff0c;都是在malloc/realloc/free上做文章&#xff0c;参考这篇文章【How the Boehm Garbage Collector Works】的解释&#xff0c;因为C数据结构是无法预料的&#xff0c;内存里面并没有特殊标记&#xff0c;很难判断哪些是指针哪些是数据&#xf…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...