当前位置: 首页 > 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…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

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

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

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...