一、引用BarcodeStandard.dll

  #region BarcodeStandard.dll
/*
*
* 使用说明
需要通过NuGet进行安装BarcodeLib.dll,必不可少
*/ string inputString; /// <summary>
/// 获取所以打印机驱动名称
/// </summary>
private void getPrintDocumentlist()
{
PrintDocument print = new PrintDocument();
string sDefault = print.PrinterSettings.PrinterName;//默认打印机名
comboBox_drive.Items.Add(sDefault); comboBox_drive.Text = sDefault;//显示默认驱动名称
foreach (string sPrint in PrinterSettings.InstalledPrinters)//获取所有打印机名称
{
if (sPrint != sDefault)
{
comboBox_drive.Items.Add(sPrint);
}
} }
/// <summary>
/// 打印绘制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
Font titleFont = new Font("宋体", 9, FontStyle.Bold);//标题字体 Font fntTxt = new Font("宋体", 9, FontStyle.Regular);//正文文字 Brush brush = new SolidBrush(Color.Black);//画刷 Pen pen = new Pen(Color.Black); //线条颜色 Point po = new Point(10, 10);
try
{
//画String
e.Graphics.DrawString(GetPrintSW().ToString(), titleFont, brush, po);//打印内容 //画横线
//Point[] point = { new Point(20, 50), new Point(200, 50) };//纵坐标不变
//e.Graphics.DrawLines(pen, point);
//画竖线
//Point[] points1 = { new Point(60, 70), new Point(60, 70 + 40) };//横坐标不变
//e.Graphics.DrawLines(pen, points1);
//画矩形
//e.Graphics.DrawRectangle(pen, 20, 70, 90, 90);
} catch (Exception ex)
{
MessageBox.Show(this, "打印出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
/// <summary>
/// 获取打印内容
/// </summary>
/// <returns></returns>
public StringBuilder GetPrintSW()
{
StringBuilder sb = new StringBuilder(); string tou = "XXXXXX科技有限公司"; string address = "安徽省合肥市瑶海区"; string saleID = "100010000001"; //单号 string item = "项目"; decimal price = 25.00M; int count = 5; decimal total = 0.00M; decimal fukuan = 500.00M; sb.AppendLine(" " + tou + " \n"); sb.AppendLine("-----------------------------------------"); sb.AppendLine("日期:" + DateTime.Now.ToShortDateString() + " " + "单号:" + saleID); sb.AppendLine("-----------------------------------------"); sb.AppendLine("项目" + " " + "数量" + " " + "单价" + " " + "小计"); for (int i = 0; i < count; i++)
{
decimal xiaoji = (i + 1) * price; sb.AppendLine(item + (i + 1) + " " + (i + 1) + " " + price + " " + xiaoji); total += xiaoji; } sb.AppendLine("-----------------------------------------"); sb.AppendLine("数量:" + count + " 合计: " + total); sb.AppendLine("付款:" + fukuan); sb.AppendLine("现金找零:" + (fukuan - total)); sb.AppendLine("-----------------------------------------"); sb.AppendLine("地址:" + address + ""); sb.AppendLine("电话:130000000000"); sb.AppendLine("谢谢惠顾欢迎下次光临!"); sb.AppendLine("-----------------------------------------"); return sb; } /// <summary>
/// 生成条形码
/// </summary>
/// <param name="content">内容</param>
/// <returns></returns>
public static Image GenerateBarCodeBitmap(string content)
{
using (var barcode = new Barcode()
{
IncludeLabel = true,
Alignment = AlignmentPositions.CENTER,
Width = 250,
Height = 100,
RotateFlipType = RotateFlipType.RotateNoneFlipNone,
BackColor = Color.White,
ForeColor = Color.Black,
})
{
return barcode.Encode(TYPE.CODE128B, content);
}
}
#endregion

二、引用Seagull.BarTender.Print.dll

  #region   Seagull.BarTender.Print.dll
/// <summary>
/// 打印测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void printbt_Click(object sender, EventArgs e)
{
string qd = comboBox_drive.Text;//下拉列表选择的驱动名称
var printDocument = new PrintDocument();
//指定打印机
printDocument.PrinterSettings.PrinterName = qd;//驱动名称 printDocument.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
try
{ //打印预览
//PrintPreviewDialog ppd = new PrintPreviewDialog();
//ppd.Document = printDocument;
//ppd.ShowDialog(); //打印
printDocument.Print();
}
catch (InvalidPrinterException)
{ }
finally
{
printDocument.Dispose();
}
}
/// <summary>
/// BarTender打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BarTender_Click(object sender, EventArgs e)
{
try {
//程序中写入引用 using Seagull.BarTender.Print.dll,必不可少;
//安装Bartender后,在安装的根目录或者system32下课可找到对应的dll
#region
Engine btEngine = new Engine();
btEngine.Start();
string lj = AppDomain.CurrentDomain.BaseDirectory + "test.btw"; //test.btw是BT的模板
LabelFormatDocument btFormat = btEngine.Documents.Open(lj); //对BTW模版相应字段进行赋值
btFormat.SubStrings["name"].Value ="Liming";
btFormat.SubStrings["code"].Value = "1234567890"; //指定打印机名
btFormat.PrintSetup.PrinterName = "WPS 虚拟打印机"; //改变标签打印数份连载
btFormat.PrintSetup.NumberOfSerializedLabels = 1; //打印份数
btFormat.PrintSetup.IdenticalCopiesOfLabel = 1;
Messages messages; int waitout = 10000; // 10秒 超时
Result nResult1 = btFormat.Print("标签打印软件", waitout, out messages);
btFormat.PrintSetup.Cache.FlushInterval = CacheFlushInterval.PerSession; //不保存对打开模板的修改
btFormat.Close(Seagull.BarTender.Print.SaveOptions.DoNotSaveChanges); //结束打印引擎
btEngine.Stop();
#endregion }
catch (Exception ex)
{
MessageBox.Show("错误信息: " + ex.Message);
return;
}
} #endregion

三、引用 Interop.LabelManager2.dll

 #region  Interop.LabelManager2.dll
/// <summary>
/// 打印功能 CodeSoft
/// </summary>
/// <param name="PrintParam1">打印模板参数值1</param>
/// <param name="PrintParam2">打印模板参数值2</param>
/// <param name="PrintParam3">打印模板参数值3</param>
/// <param name="PrintParam4">打印模板参数值4</param>
/// <returns></returns>
public bool SoftCodePrint(string PrintParam1 = "", string PrintParam2 = "", string PrintParam3 = "", string PrintParam4 = "")
{
bool result = false;
int printNum = 2;//打印份数
try
{
string text = string.Empty;
ApplicationClass labApp = null;
Document doc = null;
string labFileName = AppDomain.CurrentDomain.BaseDirectory + "Template\\" + "Test.Lab";//模板地址
if (!File.Exists(labFileName))
{
throw new Exception("沒有找到标签模版");
} for (int i = 0; i < printNum; i++)
{
labApp = new ApplicationClass();
labApp.Documents.Open(labFileName, false);// 调用设计好的label文件
doc = labApp.ActiveDocument; //可通过配置档进行配置打印信息
doc.Variables.FreeVariables.Item("模板变量名称1").Value = PrintParam1;
doc.Variables.FreeVariables.Item("模板变量名称2").Value = PrintParam2;
doc.Variables.FreeVariables.Item("模板变量名称3").Value = PrintParam3;
doc.Variables.FreeVariables.Item("模板变量名称4").Value = PrintParam4;
doc.PrintDocument(1);
} labApp.Quit();
result = true;
}
catch (Exception ex)
{ }
return result; }
#endregion

dll下载地址:

C#控制打印机打印的更多相关文章

  1. [No000038]操作系统Operating Systems -CPU

    管理CPU ,先要使用CPU… CPU 的工作原理 CPU上电以后发生了什么? 自动的取指 — 执行 CPU 怎么工作? CPU怎么管理? 管理CPU 的最直观方法 设好PC 初值就完事! 看看这样做 ...

  2. USB做Host的OTG原理

    在介绍USBOTG的基础上,着重介绍Maxim公司的MAX3301E型USBOTG电路的特点.内部结构和工作原理. 1 引言 随着USB2.0版本的发布,USB越来越流行,已经成为一种标准接口.现在, ...

  3. 操作系统学习笔记4 | CPU管理 && 多进程图像

    操作系统的核心功能就是管理计算机硬件,而CPU就是计算机中最核心的硬件.而通过学习笔记3的简史回顾,操作系统通过多进程图像实现对CPU的管理.所以多进程图像是操作系统的核心图像. 参考资料: 课程:哈 ...

  4. C#调用windows api控制打印机 状态获取 打印 自定义纸张 完整版

    using System; using System.Text; using System.Runtime.InteropServices; using System.Security; using ...

  5. C#控制打印机通过不同纸盒/进纸口进纸打印

    通常我们是通过程序操作打印机打印我们设置好的内容,但基本都是打印机默认进纸口打印:最近有一个通过C#程序控制两个进纸口分别进一张纸进行打印的需求,通过偿失找到了解决方案如下: 关于C#调用打印机打印的 ...

  6. 【转】C#使用ESC指令控制POS打印机打印小票

    .前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos ...

  7. C#使用ESC指令控制POS打印机打印小票

    1.前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的po ...

  8. 【不积跬步,无以致千里】关闭631端口cups打印服务和8009端口ajp

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. VB6-系统打印常识

    在一次做图片打印的时候,对位置的调整老是不得法,后来通过CBM666老师的帮助才解决问题,分享以下他给的帮助.     , , picA.Width , picA.Height Printer.End ...

随机推荐

  1. 右键没有word?excel?ppt?注解表该改改啦

    ✿[office 2019]office2010版本以上的都可以(例如:office 2010.office 2016.office 2019) 一.快速方法解决右键没有word: 在电脑桌面右键一个 ...

  2. JavaScript通过父节点ID递归生成JSON树

    JavaScript通过父节点ID递归生成JSON树: · 实现思路:通过递归实现(第一次递归的时候查询出所有的父节点,然后通过当前父节点id不断地去查询所有子节点,直到递归完毕返回)   · 代码示 ...

  3. Elasticsearch (1) 文档操作

    本文介绍如何在Elasticsearch中对文档进行操作. 1.检查Elasticsearch及Kibana运行是否正常 在浏览器输入192.168.6.16:9200,有如下输出则说明Elastic ...

  4. Pycharm 实现保存时修正格式(format_on_save)

    前言 VSCODE是近年来备受欢迎的轻量级代码编辑器,有一项非常实用功能--保存时修正代码格式(formatonsave) Pycharm作为一款IDE,虽然本身不具备此功能,但通过几个并不复杂的设置 ...

  5. CocoaPods使用专题 by h.l

    cocoaPods安装 CocoaPods安装和使用教程(code4app) cocoapods使用问题解决 cocoapods慢如何解决? CocoaPods停在Analyzing dependen ...

  6. .NET 云原生架构师训练营(权限系统 RGCA 开发任务)--学习笔记

    目录 目标 模块拆分 OPM 开发任务 目标 基于上一讲的模块划分做一个任务拆解,根据任务拆解实现功能 模块拆分 模块划分已经完成了边界的划分,边界内外职责清晰 OPM 根据模块拆分画出 OPM(Ob ...

  7. Docker 与 K8S学习笔记(二十二)—— 高效使用kubectl的小技巧

    kubectl作为我们主要的操作K8S的工具,其具备非常丰富的功能,但是如果不经过打磨,使用起来还是存在诸多不便,今天我们来看看如何将我们的kubectl打磨的更加易用. 一.命令自动补全 kubec ...

  8. JVM的监控

    # Table of Contents * 一.jvm常见监控工具&指令 * 1. jps:jvm进程状况工具 * 2.jstat: jvm统计信息监控工具 * 3.jinfo: java配置 ...

  9. 《PHP程序员面试笔试宝典》——如何解决求职中的时间冲突问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 对求职者而言,求职季就是一个赶场季,一天少则几家.十几家企业入校招聘,多则几十家.上百家企业招兵买马.企业多,选择项自然 ...

  10. Solution -「AGC 010C」「AT 2304」Cleaning

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的无根树,点有点权,每次选择两个不同的叶子,使它们间的简单路径的所有点权 \(-1\),问能否将所有点 ...