
#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()
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)