C# 小票打印机 直接打印 无需驱动

c# winform调用POS热敏打印机打印小票 打印机是pos80,pos打印机走windows标准协议,使用winform中的打印控件就可以。 此示例根据打印内容自动调整打印的长度实现打印。 打印有异常请看最后的注意事项。 安装打印机驱动, 设置打印属性 打印 设置打印触发的事件 /// <summary> /// 定义每行高度,定位打印point用,设置比Font的大小要大一点,留出行间距 单位百分之一英寸 1英寸=25.4mm /// </summary> int fontHeight = 20; /// <sum 阅读详情
class LPTControl
    {
        #region API函数
        [StructLayout(LayoutKind.Sequential)]
        private struct OVERLAPPED
        {
            int Internal;
            int InternalHigh;
            int Offset;
            int OffSetHigh;
            int hEvent;
        }

        [DllImport("kernel32.dll")]
        private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode,
            int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);

        [DllImport("kernel32.dll")]
        private static extern bool WriteFile(int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite,
            out int lpNumberOfBytesWritten, out OVERLAPPED lpOverlapped);

        [DllImport("kernel32.dll")]
        private static extern bool CloseHandle(int hObject);
        #endregion

        public enum HorPos { Left, Center, Right }

        private int iHandle;
        private int ColWidth = 32;

        public bool Open()
        {
            iHandle = CreateFile("LPT1", 0x40000000, 0, 0, 3, 0, 0);
            if (iHandle != -1)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        public bool Write(string Data)
        {
            try
            {
                if (iHandle != -1)
                {
                    int i;
                    OVERLAPPED x;
                    byte[] bData = System.Text.Encoding.Default.GetBytes(Data);
                    return WriteFile(iHandle, bData, bData.Length, out i, out x);
                }
                else
                {
                    return false;
                }
            }
            catch { return false; }
        }

        public bool Write(byte[] bdata)
        {
            if (bdata.Length == 0) return false;
            if (iHandle != -1)
            {
                int i;
                OVERLAPPED x;
                return WriteFile(iHandle, bdata, bdata.Length, out i, out x);
            }
            else
            {
                return false;
            }
        }

        public bool WriteLine(string Data)
        {
            bool Result = Write(Data);
            if (Result) Result = NewRow();
            return Result;
        }

        public bool WriteLine(string Data, HorPos horpos)
        {
            int Length = Encoding.Default.GetBytes(Data).Length;
            if (Length > ColWidth || HorPos.Left == horpos) return WriteLine(Data);
            switch (horpos)
            {
                case HorPos.Center:
                    Data = Data.PadLeft(Length + (ColWidth - Length) / 2 - (Length - Data.Length), ' ');
                    break;
                case HorPos.Right:
                    Data = Data.PadLeft(ColWidth - (Length - Data.Length), ' ');
                    break;
                default:
                    break;
            }
            return WriteLine(Data);
        }

        public bool Close()
        {
            return CloseHandle(iHandle);
        }

        public bool PrintLine()
        {
            return WriteLine("================================");
        }

        public bool PrintDate()
        {
            return WriteLine("打印时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        }

        public bool NewRow()
        {
            bool Result = Write(new byte[] { 27, 10, 13 });
            return Result;
        }

        public bool NewRow(int iRow)
        {
            bool Result = false;
            for (int i = 0; i < iRow; i++)
            {
                Result = NewRow();
                if (!Result) break;
            }
            return Result;
        }

        public bool CutPaper()
        {
            NewRow(5);
            return Write(new byte[] { 27, 105 });
        }
    }

    public class Printer

    {
        #region 预定义类型
        [FlagsAttribute]
        public enum PrinterEnumFlags
        {
            PRINTER_ENUM_DEFAULT = 0x00000001,
            PRINTER_ENUM_LOCAL = 0x00000002,
            PRINTER_ENUM_CONNECTIONS = 0x00000004,
            PRINTER_ENUM_FAVORITE = 0x00000004,
            PRINTER_ENUM_NAME = 0x00000008,
            PRINTER_ENUM_REMOTE = 0x00000010,
            PRINTER_ENUM_SHARED = 0x00000020,
            PRINTER_ENUM_NETWORK = 0x00000040,
            PRINTER_ENUM_EXPAND = 0x00004000,
            PRINTER_ENUM_CONTAINER = 0x00008000,
            PRINTER_ENUM_ICONMASK = 0x00ff0000,
            PRINTER_ENUM_ICON1 = 0x00010000,
            PRINTER_ENUM_ICON2 = 0x00020000,
            PRINTER_ENUM_ICON3 = 0x00040000,
            PRINTER_ENUM_ICON4 = 0x00080000,
            PRINTER_ENUM_ICON5 = 0x00100000,
            PRINTER_ENUM_ICON6 = 0x00200000,
            PRINTER_ENUM_ICON7 = 0x00400000,
            PRINTER_ENUM_ICON8 = 0x00800000,
            PRINTER_ENUM_HIDE = 0x01000000
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct PRINTER_INFO_2
        {
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pServerName;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pPrinterName;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pShareName;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pPortName;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pDriverName;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pComment;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pLocation;
            public IntPtr pDevMode;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pSepFile;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pPrintProcessor;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pDatatype;
            [MarshalAs(UnmanagedType.LPTStr)]
            public string pParameters;
            public IntPtr pSecurityDescriptor;
            public uint Attributes;
            public uint Priority;
            public uint DefaultPriority;
            public uint StartTime;
            public uint UntilTime;
            public uint Status;
            public uint cJobs;
            public uint AveragePPM;
        }

        #endregion
        #region 引用 WindowsAPI
        //引用API声明
        [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]

        private static extern bool EnumPrinters(PrinterEnumFlags Flags, string Name, uint Level,
                                        IntPtr pPrinterEnum, uint cbBuf, ref uint pcbNeeded,
                                        ref uint pcReturned);
        #endregion

        public static string[] GetPrinter()
        {
            string[] Result = null;
            PRINTER_INFO_2[] printInfo;
            printInfo = EnumPrinters(PrinterEnumFlags.PRINTER_ENUM_LOCAL);

            if (printInfo != null && printInfo.Length >= 0)
            {
                Result = new string[printInfo.Length];
                for (int i = 0; i < printInfo.Length; i++)
                {
                    Result[i] = printInfo[i].pPrinterName;
                }
            }
            return Result;
           
        }
       
        #region 托管代码
        /// <summary>
        /// 遍历打印机
        /// </summary>
        /// <param name="Flags"></param>
        /// <returns></returns>
        public static PRINTER_INFO_2[] EnumPrinters(PrinterEnumFlags Flags)
        {
            PRINTER_INFO_2[] Info2 = null;
            uint cbNeeded = 0;
            uint cReturned = 0;
            bool ret = EnumPrinters(Flags, null, 2, IntPtr.Zero, 0, ref cbNeeded, ref cReturned);
            IntPtr pAddr = Marshal.AllocHGlobal((int)cbNeeded);
            ret = EnumPrinters(Flags, null, 2, pAddr, cbNeeded, ref cbNeeded, ref cReturned);
            if(ret)
            {
                Info2 = new PRINTER_INFO_2[cReturned];
                int offset = pAddr.ToInt32();
                for (int i = 0; i < cReturned; i++)
                {
                    Info2[i] = (PRINTER_INFO_2)Marshal.PtrToStructure(new IntPtr(offset), typeof(PRINTER_INFO_2));
                    offset += Marshal.SizeOf(typeof(PRINTER_INFO_2));
                }
                Marshal.FreeHGlobal(pAddr);
            }
            return Info2;
        }
        #endregion
    }

调用代码:

//不用驱动的话,不判断是否存在打印机。

if (Printer.GetPrinter() == null || Printer.GetPrinter().Length == 0)
            {
                State = "没有找到合适的打印机...";
                return;
            }

            State = "正在打印...";
            try
            {
                LPTControl lpt = new LPTControl();
                lpt.Open();
                lpt.WriteLine("数据头标题", LPTControl.HorPos.Center);
                lpt.WriteLine("数据副标题", LPTControl.HorPos.Center);
                lpt.PrintLine();
                string StrTitle = " 列名1 ";
                StrTitle += "       列名2    ";
                lpt.WriteLine(StrTitle);
                for (int i = 0; i < DSCount.Tables[0].Rows.Count; i++)
                {
                    lpt.WriteLine(DSCount.Tables[0].Rows[i][0].ToString()
                        + DSCount.Tables[0].Rows[i][1].ToString().PadLeft(11, ' '));
                }
                lpt.NewRow();
                lpt.WriteLine("合计:".PadRight(8, ' ') + LabCount.Text.PadLeft(11, ' '));
                lpt.PrintLine();
                lpt.PrintDate();
                lpt.CutPaper();
                lpt.Close();
                System.Threading.Thread.Sleep(500);
                State = "打印完成...";
            }
            catch (Exception Ex)
            {
                State = "打印出错...";
                WriteLog("打印出错:" + Ex.Message);
            }

如果没有安装打印机驱动程序,调用的时候,一定要保证打印机联机。

适用于56-58mm的纸

转载地址:http://hi.baidu.com/mjp1234airen4385/blog/item/a5049d175187e711962b4374.html

c# 小票机打印二维条码_C#小票打印机 使用的佳博GP-5890XIIIusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Printing;using Syst... 阅读详情

相关推荐

C#小票打印程序开发全攻略

Graphics类是.NET Framework中用于处理图形和绘图操作的核心类之一。它提供了大量方法用于在屏幕上、图像上或者打印机上进行基本的绘图操作,比如绘制线条、矩形、圆角矩形、弧形、多边形和曲线等。此外,该类还允许进行图像处理、颜色转换、矩阵变换和字体渲染等高级绘图操作。当在Windows Forms应用程序中使用Graphics类时,通常会通过响应绘图事件(例如Paint事件)来获得Graphics对象,然后使用其方法进行绘图。常用方法包括:DrawLine: 绘制直线。

weixin_42509720的博客 756

C# 小票打印机 直接打印 无需驱动[转]

class LPTControl { #region API函数 [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int InternalHigh; int O...

weixin_33813128的博客 653

C# WinForm热敏小票打印源码包:含界面、模板配置与主流打印机适配

直接可用的WinForm小票打印项目,基于C#和.NET Framework 4.0+开发,开箱即用。主窗口Form2提供可视化操作界面,支持添加商品名称、单价、数量、合计金额、LOGO图片和二维码等元素;打印逻辑封装在TicketPrint.cs和TicketSet.cs中,通过Windows原生GDI接口输出,无需额外安装驱动,兼容EPSON、Star、佳博等主流80mm热敏打印机。配置信息统一管理在Settings.settings中,小票模板结构设计为可扩展形式,便于按需增减字段或调整排版。资源文件

tt34567的博客 289

C#调用小票打印机

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Drawing.Printing;namespace BNCheckItemsClient.FormC.Spec...

weixin_33807284的博客 1048

Winform小票打印工具:自定义打印格式与语音合成

在本章节,我们将回顾整个小票打印工具开发的过程。项目从需求分析开始,经过界面设计、逻辑实现、性能优化到最终的用户测试,每一个阶段都是对我们的技术能力的挑战。我们采用Winform框架,成功地构建了一个用户友好的桌面应用程序。通过使用XML配置文件来管理小票模板,我们实现了小票内容的动态生成与修改,同时提高了程序的可维护性。

weixin_27645199的博客 1197

C# usb 无驱动 POS打印 小票打印

C# usb 无驱动 POS打印 小票打印 visual studio 2012 绝对可以用

C#打印小票(连续自动打印)

注意前端需要引用(LodopFuncs.js,JsBarcode.all.min.js,jquery.js)当然还有安装打印机驱动还有Lodop的驱动 前端代码调用打印方法部分 json.printinfo是后端传向前端的生成好的打印代码。 //执行打印小票 var orderids = ""; if (json.printinf

技术分享博客 3091

C#完整小票输出打印,套打,打印

打印 ,套打, 完整小票输出打印,完整打印输出,支持合计大写。

c#餐饮系统打印机_C# 小票打印机 直接打印 无需驱动[转]

class LPTControl{#region API函数[StructLayout(LayoutKind.Sequential)]private struct OVERLAPPED{int Internal;int InternalHigh;int Offset;int OffSetHigh;int hEvent;}[DllImport("kernel32.dll")]private stat...

weixin_29008805的博客 464

C# 小票打印

C# 小票打印代码,支持市面上常用的小票打印机

C#小票打印demo

使用方法详见我的博客:https://blog.youkuaiyun.com/HorseRoll/article/details/84136088

大容量磁带录音机

1%纤维素,1%丁腈橡胶,1%丙烯酸酯橡胶,1%无定形聚酯,1%氨酯橡胶,1%聚氨基甲酸乙酯树脂,环氧树脂,密胺树脂,1%醋酸乙烯,1%丙烯酸酯丁基系的软质树脂构成。磁性粉末稳定剂有对氯乙烯系粘合剂,使用硬脂酸钡等金属无机盐。用强磁型材料铁,镍,钴,钇,镝,铁素体,二氧化铬,钴-伽玛氧化铁做磁带磁性材料,磁带基材用醋酸纤维,聚酯,三醋酸纤维素,在磁带外面的线圈上加不同直流电压,产生不同磁性,在不同磁性下记录不同信息,磁带录音机的输出输入电路加上放大电路,既可以在弱小的磁场中记录小信号,或读出小信号。

zhangluan2019的博客 609

AIWA-J707随身听电路图

AIWA随身听,这个老古董不知道有没有还在玩,磁带机的魅力属于少数人了,想修机子的拿去参考,J303 505 707 501 大多类似的图纸

【亲测免费】 C USB 无驱动 POS 打印小票解决方案

C# USB 无驱动 POS 打印小票解决方案 去发现同类优质开源项目:https://gitcode.com/ 简介 本资源文件提供了一个使用 C# 语言实现的 USB 无驱动 POS 打印小票的解决方案。该方案适用于需要在没有安装特定驱动程序的情况下,通过 USB 接口直接控制 POS 打印机进行小票打印的场景。 功能特点 无驱动打印:无需安装特定的打印机驱动程序,直接通过 USB 接口与 ...

gitblog_09732的博客 515

避开这些坑!RK3588安卓系统内置输入法的正确姿势(含.mk文件修改指南)

本文详细解析了在RK3588安卓系统定制中预置第三方输入法的完整流程与关键避坑指南。重点涵盖APK签名、Android.mk文件编写、系统默认输入法配置(使用adb ime list命令获取服务名)以及SeLinux策略适配等核心步骤,并指出RK3566/RK3568等兄弟平台的通用性与差异点,帮助开发者实现稳定、深度的系统集成。

tgb34567890的博客 437

set_data_check专题[使用,report_timing,setup/hold检查]

set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

cy413026的博客 1万+

网上找的,C# 小票打印机 直接打印,备用

C# 小票打印机 直接打印 无需驱动2009-07-11 10:53 class LPTControl { #region API函数 [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal;...

weixin_30888027的博客 125

基于ESP32-C3的便携式血氧仪硬件与算法实现

血氧饱和度(SpO₂)监测是生理参数无创检测的核心技术之一,其原理基于光电容积脉搏波(PPG)信号中红光与红外光吸收比值的动态变化。该技术依赖高精度模拟前端、稳定光学激励及实时数字信号处理能力,在消费级健康设备中面临功耗、体积与测量鲁棒性的多重约束。ESP32-C3凭借集成LEDC、12位ADC与低功耗双核架构,成为PPG终端的理想主控平台;结合定制化指夹式光学探头与比率法血氧算法,可实现非诊断级但趋势可靠的日常健康监测。本文围绕硬件电路设计、电源管理策略与嵌入式信号处理流程展开,覆盖从LED驱动、跨阻放大

weixin_29025501的博客 132

C#调用系统打印机(XP-58小票打印)

C#调用系统打印机(XP-58小票打印) 需要安装XP-58驱动。 // An highlighted block using System; using System.Drawing; using System.Drawing.Printing; using System.Globalization; using System.Management; using System.Windows.Forms; namespace 实验 { public class USBPrinter {

qq_41195207的博客 1787

Android逆向实战:抖音聊天记录数据库解析与导出(附完整SQL查询)

本文提供了一份Android逆向实战指南,详细解析了抖音聊天记录数据库的结构与导出方法。通过定位核心的`im.db`数据库文件,深度解读conversation_list、msg等关键表结构,并附上完整的SQL查询语句,帮助开发者或研究人员安全、合规地提取和分析本地聊天数据,适用于移动安全研究与数据分析场景。

mango的博客 858

GitHub霸榜神器!NextChat领衔DeepSeek全栈开发范式

NextChat(原ChatGPT-Next-Web)是GitHub上斩获81.2K星标的现象级开源项目,定位为"轻量级AI助手终端",支持DeepSeek、Claude、GPT-4、Gemini等20+主流大模型。• 原生集成DeepSeek、GPT-4、Gemini Pro等模型API,同时兼容RWKV-Runner、LocalAI等自建模型框架,通过环境变量。• 客户端体积仅5MB(Windows安装包约6MB),采用PWA渐进式Web应用技术,首屏加载速度优化至100KB级,老旧设备亦可流畅运行。

实战AI智能体 894

【亲测免费】 网页JS与本地C程序WebSocket通讯打印小票实现:远程打印的利器

网页JS与本地C#程序WebSocket通讯打印小票实现:远程打印的利器 【下载地址】网页JS与本地C程序WebSocket通讯打印小票实现 本项目通过WebSocket技术实现了静态网页与本地C#应用程序的实时通讯,支持从网页端发送指令调用本地打印机进行小票打印。C#应用程序可最小化至系统托盘,减少桌面空间占用。该方案...

gitblog_06752的博客 1091

一.镜头知识之焦点,焦距,有效焦距,前焦距,后焦距

由光学系统中镜片的最后一面到像面的距离。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5579

网页JS与本地C程序WebSocket通讯打印小票实现

网页JS与本地C#程序WebSocket通讯打印小票实现 【下载地址】网页JS与本地C程序WebSocket通讯打印小票实现 本项目通过WebSocket技术实现了静态网页与本地C#应用程序的实时通讯,支持从网页端发送指令调用本地打印机进行小票打印。C#应用程序可最小化至系统托盘,减少桌面空间占用。该方案适用于需要远程或...

gitblog_06700的博客 623

cesium 深度图(获取区域最高最低点位)

文章摘要: Cesium深度图技术可用于获取区域地形高程数据,核心实现步骤包括:1)通过离屏相机构建独立渲染环境,使用正交投影确保采样精度;2)采用离屏渲染技术获取均匀分布的地形点数据。关键技术点包含多边形外包矩形计算、后台相机配置(5km高度正交投影)、1024×1024像素离屏视图设置,以及深度数据解析(RGBA格式转换和三维坐标还原)。该方法避免了主视图干扰,可精准获取区域内地形高程信息,为填挖方分析等应用提供基础数据支持。

God's asylum的博客 283

07RK3568 I2S主模式 FPGA

RK3568与fpga通过i2s0连接,fpga连接音频芯片ES8388,RK为i2s主模式。调试时发现可正常采集来自fpga的数据。不可发送数据至fpga。由于i2s后连接fpga这里用了Rockchip的dummy-codec,一个虚拟的编解码器。

qq_39451352的博客 303
上一篇: C# 多线程基础,仅以此心得献给那些渴望学习多线程的朋友
下一篇: 模拟 扫描枪 扫描条形码过程
半部論語
博客等级 码龄14年 8粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值