c#做小票打印机的应用程序,不知道安装了驱动,用的时usb001端口,不知道怎么连接,求大神帮助。。。

c#做小票打印机的应用程序,不知道安装了驱动,用的时usb001端口,不知道怎么连接,求大神帮助。。。,第1张

小票打印机设置成默认的打印机,然后用Stream 流,下面连接的就是小票打印机打印rdlc报表,完全可以使用,你可以自己改改用调用的是PPrint()就行

#region 报铅敬表自打印

public void PPrint()

{

try

{

LocalReport report = this.reportViewer1.LocalReport

Export(report)

m_currentPageIndex = 0

NBPrint()

if (m_streams != null)

{

foreach (Stream stream in m_streams)

stream.Close()

m_streams = null

}

}

catch (Exception ex)

{

MessageBox.Show("在打印过程中出现异常! " + ex.Message.ToString())

}

}

private void Export(LocalReport report)

{

//7.5in 3.66in 0 0 0 0 当前设置为A4纵向

string deviceInfo =

"<DeviceInfo>" +

" <OutputFormat>EMF</OutputFormat>" +

" <PageWidth>72.1mm</PageWidth>" +

" <PageHeight>250mm</PageHeight>槐尺慎" +

" <MarginTop>0in</MarginTop>" +

" <MarginLeft>0in</MarginLeft>" +

" <MarginRight>0in</MarginRight>" +

" <MarginBottom>0in</MarginBottom>" +

"</DeviceInfo>"

Warning[] warnings

m_streams = new List<Stream>()

report.Render("Image", deviceInfo, CreateStream, out warnings)

foreach (Stream stream in m_streams)

{

stream.Position = 0

return

}

}

private void NBPrint()

{

if (m_streams == null || m_streams.Count == 0)

return

PrintDocument printDoc = new PrintDocument()

if (!printDoc.PrinterSettings.IsValid)

{

string msg = String.Format("Can't find printer \困竖"{0}\".", "默认打印机!")

MessageBox.Show(msg, "找不到默认打印机")

return

}

printDoc.PrintPage += new PrintPageEventHandler(PrintPage)

printDoc.Print()

this.Close()

}

private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)

{

string filenameext = DateTime.Now.Year.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString()

Stream stream = new FileStream(name + "." + fileNameExtension, FileMode.Create)

m_streams.Add(stream)

if (m_streams.Count >1)

{

m_streams.RemoveAt((int)1)

}

return stream

}

private void PrintPage(object sender, PrintPageEventArgs ev)

{

Metafile pageImage = new Metafile(m_streams[m_currentPageIndex])

ev.Graphics.DrawImage(pageImage, ev.PageBounds)

m_currentPageIndex++

ev.HasMorePages = (m_currentPageIndex <m_streams.Count)

}

#endregion

DOS 命令 PRINT 可以打印 文本文件。

例如:

PRINT /D:\\MYNETWORK\PS_Printer A.IN

/D:\\MYNETWORK\PS_Printer -- 打印设激袭备,唯铅肢我的网络上的打印机

A.IN -- 要打的文件名,可以含路指世径

C 语言中函数 system("命令字符串")

把DOS命令字符串填入,就执行DOS命令。

打印string。

给你个类

public class TicketSet

{

public struct keyAndValue

{

public String keyStr

public String valueStr

}

private List<keyAndValue>keyAndValueListTop = new List<keyAndValue>()

//陪弯/ <summary>

/// 小票头部信息

/// </summary>

public List<keyAndValue>KeyAndValueListTop

{

get { return keyAndValueListTop}

}

/// <summary>

/// 增加小票芦中闷培碧头部键值对

/// </summary>

/// <param name="keyStr">键</param>

/// <param name="valueStr">值</param>

public void AddKeyAndValueTop(String keyStr, String valueStr)

{

keyAndValue keyandvale = new keyAndValue()

keyandvale.keyStr = keyStr

keyandvale.valueStr = valueStr

this.keyAndValueListTop.Add(keyandvale)

}

private List<keyAndValue>keyAndValueListMid = new List<keyAndValue>()

/// <summary>

/// 小票中间费用信息

/// </summary>

public List<keyAndValue>KeyAndValueListMid

{

get { return keyAndValueListMid}

}

/// <summary>

/// 增加小票中间费用键值对

/// </summary>

/// <param name="keyStr">键</param>

/// <param name="valueStr">值</param>

public void AddKeyAndValueMid(String keyStr, String valueStr)

{

keyAndValue keyandvale = new keyAndValue()

keyandvale.keyStr = keyStr

keyandvale.valueStr = valueStr

this.keyAndValueListMid.Add(keyandvale)

}

private List<keyAndValue>keyAndValueListFoot = new List<keyAndValue>()

/// <summary>

/// 小票底部信息

/// </summary>

public List<keyAndValue>KeyAndValueListFoot

{

get { return keyAndValueListFoot}

}

/// <summary>

/// 增加小票底部键值对

/// </summary>

/// <param name="keyStr">键</param>

/// <param name="valueStr">值</param>

public void AddKeyAndValueFoot(String keyStr, String valueStr)

{

keyAndValue keyandvale = new keyAndValue()

keyandvale.keyStr = keyStr

keyandvale.valueStr = valueStr

this.keyAndValueListFoot.Add(keyandvale)

}

private String ticketSignature

/// <summary>

/// 小票顶部签名

/// </summary>

public String TicketSignature

{

get { return ticketSignature}

set { ticketSignature = value}

}

private String ticketTitle

/// <summary>

/// 小票的标题

/// </summary>

public String TicketTitle

{

get { return ticketTitle}

set { ticketTitle = value}

}

private String ticketFooter

/// <summary>

/// 小票底部签名

/// </summary>

public String TicketFooter

{

get { return ticketFooter}

set { ticketFooter = value}

}

private DataTable dtGoodsList

/// <summary>

/// 商品列表信息

/// </summary>

public DataTable DtGoodsList

{

get { return dtGoodsList}

set { dtGoodsList = value}

}

private int ticketWidth

/// <summary>

/// 小票宽度,按字符数计算

/// </summary>

public int TicketWidth

{

get { return ticketWidth}

set { ticketWidth = value}

}

private Decimal colper1

/// <summary>

/// 商品列表中第一个标题所占小票总宽度的百分比

/// </summary>

public Decimal Colper1

{

get { return colper1}

set { colper1 = value}

}

private Decimal colper2

/// <summary>

/// 商品列表中第二个标题所占小票总宽度的百分比

/// </summary>

public Decimal Colper2

{

get { return colper2}

set { colper2 = value}

}

private Decimal colper3

/// <summary>

/// 商品列表中第三个标题所占小票总宽度的百分比

/// </summary>

public Decimal Colper3

{

get { return colper3}

set { colper3 = value}

}

private Decimal colper4

/// <summary>

/// 商品列表中第四个标题所占小票总宽度的百分比

/// </summary>

public Decimal Colper4

{

get { return colper4}

set { colper4 = value}

}

private Char signWeight

/// <summary>

/// 重要分隔符的样式

/// </summary>

public Char SignWeight

{

get { return signWeight}

set { signWeight = value}

}

private Char signLight

/// <summary>

/// 一般分隔符的样式

/// </summary>

public Char SignLight

{

get { return signLight}

set { signLight = value}

}

/// <summary>

/// 商品列表设置

/// </summary>

/// <param name="ticket">TicketSet对象</param>

/// <returns>带格式的商品列表</returns>

private String ItemsList()

{

StringBuilder result = new StringBuilder()

if (this.dtGoodsList != null &&this.dtGoodsList.Columns.Count >0 &&this.dtGoodsList.Rows.Count >0)

{

result.Append(CreateLine(this.TicketWidth, this.SignWeight))

result.Append(ArrangeArgPosition(this.dtGoodsList.Columns[0].Caption, this.TicketWidth, this.Colper1))

result.Append(ArrangeArgPosition(this.dtGoodsList.Columns[1].Caption, this.TicketWidth, this.Colper2))

result.Append(ArrangeArgPosition(this.dtGoodsList.Columns[2].Caption, this.TicketWidth, this.Colper3))

//result.Append(ArrangeArgPosition(this.dtGoodsList.Columns[3].Caption, this.TicketWidth, this.Colper4))

result.Append("\r\n")

result.Append(CreateLine(this.ticketWidth, this.SignLight))

for (int i = 0i <this.dtGoodsList.Rows.Counti++)

{

//result.Append(SetArgPosition(this.dtGoodsList.Rows[i][0].ToString(), this.TicketWidth, false))

result.Append(ArrangeArgPosition(this.dtGoodsList.Rows[i][0].ToString(), this.TicketWidth, this.Colper1))

result.Append(ArrangeArgPosition(this.dtGoodsList.Rows[i][1].ToString(), this.TicketWidth, this.Colper2))

result.Append(ArrangeArgPosition(this.dtGoodsList.Rows[i][2].ToString(), this.TicketWidth, this.Colper3))

//result.Append(ArrangeArgPosition(this.dtGoodsList.Rows[i][3].ToString(), this.TicketWidth, this.Colper4))

result.Append("\r\n")

}

result.Append(CreateLine(this.ticketWidth, this.SignLight))

}

return result.ToString()

}

/// <summary>

/// 排列商品列表的表头信息

/// </summary>

/// <param name="arg">表头标题</param>

/// <param name="charNum">标题所占总字符数,一般按照小票总宽度的百分比来设置</param>

/// <returns>带有格式的标题</returns>

private String ArrangeArgPosition(String arg, int ticketwidth, Decimal colPer)

{

StringBuilder result = new StringBuilder(arg)

int charNum = Convert.ToInt32(ticketWidth * colPer)

if (0 != charNum)

{

int argcount = System.Text.Encoding.Default.GetByteCount(arg)

for (int i = 0i <charNum - argcounti++)

{

result.Append(" ")

}

}

return result.ToString()

}

/// <summary>

/// 设置小票头部信息,可以自动区分汉字还是英文,格式只限2行

/// </summary>

/// <param name="arg">小票头部内容</param>

/// <param name="ticketwidth">小票宽度,按照字符个数计算</param>

/// <param name="isMiddle">是否中间对齐</param>

/// <returns>带格式的小票头部信息</returns>

private String SetArgPosition(String arg, int ticketwidth, bool isMiddle)

{

StringBuilder result = new StringBuilder()

int argnum = System.Text.Encoding.Default.GetByteCount(arg)

if (argnum <= ticketwidth)

{

if (isMiddle)

{

for (int i = 0i <(ticketwidth - argnum) / 2i++)

{

result.Append(" ")

}

}

result.Append(arg)

result.Append("\r\n")

}

else

{

for (int i = 0i <= ticketwidth / 2i++)

{

int temp = ticketwidth / 2 + i

if (ticketwidth == System.Text.Encoding.Default.GetByteCount(arg.Substring(0, temp)) || ticketwidth == System.Text.Encoding.Default.GetByteCount(arg.Substring(0, temp)) - 1)

{

result.Append(arg.Substring(0, temp))

result.Append("\r\n")

result.Append(arg.Substring(temp, arg.Length - (temp)))

result.Append("\r\n")

break

}

}

}

return result.ToString()

}

/// <summary>

/// 设置小票各部分的分隔线

/// </summary>

/// <param name="ticketwidth">小票的宽度,按照字符个数计算</param>

/// <param name="signChar">分隔线的样式</param>

/// <returns>小票的分隔线</returns>

private String CreateLine(int ticketwidth, Char signChar)

{

StringBuilder result = new StringBuilder()

for (int i = 0i <ticketwidthi++)

{

result.Append(signChar)

}

result.Append("\r\n")

return result.ToString()

}

/// <summary>

/// 生成小票

/// </summary>

/// <param name="ticket">TicketSet对象</param>

/// <returns>最终小票结果</returns>

public String Ticket()

{

StringBuilder ticketStr = new StringBuilder()

//小票头部

ticketStr.Append(SetArgPosition(this.TicketSignature, this.TicketWidth, true))

ticketStr.Append(SetArgPosition(this.TicketTitle, this.TicketWidth, true))

ticketStr.Append(CreateLine(this.TicketWidth, this.signWeight))

//小票上部内容

for (int i = 0i <this.KeyAndValueListTop.Counti++)

{

ticketStr.Append(this.KeyAndValueListTop[i].keyStr + this.KeyAndValueListTop[i].valueStr + "\r\n")

}

//商品列表

ticketStr.Append(ItemsList())

//小票中部内容

for (int i = 0i <this.KeyAndValueListMid.Counti++)

{

ticketStr.Append(this.KeyAndValueListMid[i].keyStr + this.KeyAndValueListMid[i].valueStr + "\r\n")

}

ticketStr.Append(CreateLine(this.TicketWidth, this.signWeight))

//小票下部内容

for (int i = 0i <this.KeyAndValueListFoot.Counti++)

{

ticketStr.Append(this.KeyAndValueListFoot[i].keyStr + this.KeyAndValueListFoot[i].valueStr + "\r\n")

}

//小票底部

ticketStr.Append(this.TicketFooter + "\r\n")

return ticketStr.ToString()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12263604.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存