-
动态配置标签模板,并且打印;
之前做TMS、WMS系统的时候,经常要对接条码打印机来打印标签。
市面上主流的条码打印机有佳博,TSC,斑马,博思得。
这几个品牌打印机的官方SDK都大同小异,都是使用非托管dll调用函数,发送指令给打印机。
标签布局是使用X Y轴来定位的,文本换行还得自己计算文本长度截取换行,所以画标签样式还挺费时间的。
最近公司有新需求,使用动态标签。让客户自己随时配置标签的样式:配置了样式,后面打印标签的格式就是这样。
如果要做到这样,显然官方SDK是很困难的。因为本身XY轴就不好控制,而且官方SDK还不支持图片,表格这些。并且还得为每个品牌打印机编写代码,因为每个品牌的类库,dll不一样。
我想到的解决办法是:打印标签的时候根据动态标签模板画html,然后将html转pdf,最后调用pdf打印。
这样做的好处是:打印机出来的标签样式基本上可以和配置的模板一样。
不需要每个品牌打印机都编写标签布局代码了,不需要安装打印机驱动,因为使用pdf打印。
实现步骤:
一、首先肯定要有html文本,或者html网页。你要生成的pdf是什么样,就用html画一个一样的网页。
二、将html网页转为pdf文档,查询我写的另外一篇博客
https://www.cnblogs.com/liuzheng0612/p/16149034.html
三、打印PDF
1.引用O2S.Components.PDFRender4NET.dll,在nuget中下载
2.代码
/// <summary>
/// PDFRender4NET打印PDF
/// </summary>
/// <param name="filePath">pdf文件完全路径</param>
/// <param name="printName">打印机名称,不传使用默认打印机</param>
/// <param name="width">标签宽度mm</param>
/// <param name="height">标签高度mm</param>
private static void PDFRender4NETPrint(string filePath, string printName, double width, double height)
{
using (PDFFile file = PDFFile.Open(filePath))
{
PrinterSettings settings = new PrinterSettings();
settings.PrintToFile = false;
if (printName != null)
{
settings.PrinterName = printName;
}
double proportion = 0.0393701;//1mm等于0.0393701 in
width = width * proportion * 100;//乘100,标签大小单位是百分之一英寸
height = height * proportion * 100;
//设置纸张大小(可以不设置,取默认设置)3.90 in, 8.65 in
PaperSize ps = new PaperSize(printName, Convert.ToInt32(width), Convert.ToInt32(height));
//如果是自定义纸张,就要大于118,(A4值为9,详细纸张类型与值的对照请看http://msdn.microsoft.com/zh-tw/library/system.drawing.printing.papersize.rawkind(v=vs.85).aspx)
ps.RawKind = 120;
O2S.Components.PDFRender4NET.Printing.PDFPrintSettings pdfPrintSettings = new O2S.Components.PDFRender4NET.Printing.PDFPrintSettings(settings);
pdfPrintSettings.PaperSize = ps;
pdfPrintSettings.PageScaling = O2S.Components.PDFRender4NET.Printing.PageScaling.FitToPrinterMarginsProportional;
pdfPrintSettings.PrinterSettings.Copies = 1;
file.Print(pdfPrintSettings);
//file.Dispose();
}
}
出处:https://www.cnblogs.com/liuzheng0612/p/16149259.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数