基于http请求web打印组件,实现浏览器、移动端、服务端无预览打印

打印功能在项目开发中比较常用,尤其是工业级应用十分广泛,且无预览打印,而因浏览器安全机制,无法直接实现无预览打印,根据项目需求,做了一个打印的插件,可以实现无预览打印,且模板调整十分便捷

环境:Bartender 、visual studio2017
设计思路:启动一个ASP.NET应用,对外暴露接口,将数据通过参数方式接收,调用Bartender 工具进行驱动打印
优点:打印通过发送http请求方式,实现了无客户端限制,只要能发送http请求即可打印,打印无预览,直接驱动打印机
缺点:Bartender 不是一个免费软件

1.Bartender 使用

1.创建文件之后,双击即可修改纸张大小,将纸张大小设置为对应大小即可
在这里插入图片描述
2.双击文本即可制定文字的数据来源,由于数据为动态数据,将数据源设置为数据库字段
在这里插入图片描述
3.点击数据库设置,添加一个数据源,设置为文本格式
在这里插入图片描述
4.点击下一步,可以新建一个txt文件,然后里面添加一个一些数组,通过TAB键分隔,这样Bartender 会通过TAB键进行字段拆分,而我们实现动态数据源原理就是,将这个TXT文件里面的值替换掉就好了
5.点击下一步,选择通过TAB返回

在这里插入图片描述
6.指定域可以了,Bartender 会根据指定的txt文件TAB进行拆分出域
在这里插入图片描述
7.若使用二维码直接将条形的类型切换成QR code即可
在这里插入图片描述

2.创建asp.net应用

1.controller中接收参数

		 // Get api/values/batch
        public HttpResponseMessage Get(string strjson)
        {
            List< Material> material =JsonConvert.DeserializeObject<List<Material>>		(strjson);
            Material[] materials = material.ToArray();
            Result result = new Result();
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string str = serializer.Serialize(result);
            HttpResponseMessage resultMessage = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
            //调用
            Printer.PrintSerialNumber(materials);
            return resultMessage;
        }

2.打印数据配置

using Com.Estsh.MES.App;
using pcp_print.Models;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;

namespace pcp_print.utils
{
    public class Printer
    {
    
        private static string BarTenderPath =
        	//指定bartend.exe文件
            Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"App_Data\Bartend\bartend.exe");
          //指定模板文件对应的数据文件
        private static string LabelPath =
            Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"App_Data\LabelFile");
        private static object _lock_print_object = new object();
        private const char TAB = '\t';

        private const string NEW_LINE = "\r\n";



        public static bool PrintSerialNumber(string materialNumber, string materialName, string serialNumber, string labelFileName, string dataFileName)
        {	
        	
            string LabelTemplatePath = Path.Combine(LabelPath, labelFileName);
            string LabelTextPath = Path.Combine(LabelPath, dataFileName);
			//将数据文件写入txt文件中,每写一个,追加一个TAB
            StringBuilder PrintContent = new StringBuilder();
            PrintContent.Append(materialNumber); PrintContent.Append(TAB);
            PrintContent.Append(materialName); PrintContent.Append(TAB);
            PrintContent.Append(serialNumber); PrintContent.Append(TAB);
            lock (_lock_print_object)
            {
                BarTenderPrinter.WriteFile(LabelTextPath, null, Encoding.UTF8, false);
                BarTenderPrinter.WriteFile(LabelTextPath, PrintContent.ToString(), Encoding.UTF8, false);
                //驱动打印
                BarTenderPrinter.Print(BarTenderPath, LabelTemplatePath);
            }

            return true;

        }

    }
}

3.运行项目,直接浏览器访问地址即可访问

PS(Bartender 配置好之后请先测试测试一下数据文件是否正确,若是因为数据文件异常,Bartender 并不会抛出异常)
所需要的dll依赖已经放在项目中了,直接下载即可使用,集成了一个阉割版的Bartender ,缺点是模板文件无法创建,只能复制,指定TXT数据源的时候,只能输入文件地址,无法进行选择

链接:https://pan.baidu.com/s/1lUvHxPakYtiCuRzOTyedCA
提取码:0e38
使用此方式需要熟悉.net开发后台应用,Bartender 的使用不清楚的可以在网上搜一下,亲测有效,欢迎留言探讨

猜你喜欢

转载自blog.csdn.net/qq_38318330/article/details/108209923