按照已有的模板打印小票<二> ——調用windows打印機打印 可設置字體樣式


按照已有的模板打印小票<二>

                                                        ——調用windows打印機打印 可設置字體樣式

之前寫過一篇文章《按照已有的模板輸出一(如發票)》,是關於如何給已有的模板賦值。在項目的實踐過程中,我又遇到了如何調用windows打印機打印的情況,我覺得有必要記錄與分享。

  

 

                                                                        如圖1

 

一、小票模板

1)  Txt文件編寫模板

打印小票我們還是用我們一貫的做法,使用模板。先用txt文件寫出如圖1模板樣式中的模板。如圖2。(文中txt模板文件取名為排號機小票)

 

 

           圖2

2)  Txt模板文件放在項目文件下

寫完模板,將模板放在項目的目錄下(排號機小票),如圖3。

 

 

                                     圖3

3)  始終復制到輸出目錄

將排號機小票模板放在項目中后,還有一個操作很重要,選中排號機小票模板——>右鍵屬性——>復制到輸出目錄修改為始終復制,生成操作修改為無。如圖4-5.

 

 這一操作是為了每次項目編譯后,都能生成模板在bin目錄下。

 

 

          圖4

 

 

        圖5

 

 

4)  給模板賦值

如圖2,我們寫了模板,但是並沒有給模板賦值,接下來講如何給模板賦值。

a)       首先我們得有數據源。

  這里我新建一個類,保存數據源。

   public class PrintTicketModel

    {

        /// <summary>

        /// 煙點名稱

        /// </summary>

        public string Ydmc { get; set; }

 

        /// <summary>

        ///序號

        /// </summary>

        public int  Xh { get; set; }

 

        /// <summary>

        /// 交售通道

        /// </summary>

        public int  Jstd { get; set; }

 

        /// <summary>

        /// 煙農姓名

        /// </summary>

        public string   Ynxm { get; set; }

 

        /// <summary>

        /// 卡號尾號

        /// </summary>

        public string  Yhwh { get; set; }

 

        /// <summary>

        /// 當日余量

        /// </summary>

        public decimal Dryl { get; set; }

 

        /// <summary>

        /// 合同余量

        /// </summary>

        public decimal Htyl { get; set; }

 

        /// <summary>

        /// 合同余量

        /// </summary>

        public decimal Zhtl { get; set; }

 

 

        /// <summary>

        /// 等待人數

        /// </summary>

        public int  Ddrs { get; set; }

 

        /// <summary>

        /// 時間

        /// </summary>

        public DateTime  Sj { get; set; }

}

 

b)       給類賦值

窗體加載后我馬上給數據源賦了初始值。

private void FormPrintTicket_Load(object sender, EventArgs e)

        {

          

            //給默認值

            TicketModel.Ydmc = "姜州煙點";

            TicketModel.Xh = 1007;

            TicketModel.Jstd = 1;

            TicketModel.Ynxm = "張留高";

            TicketModel.Yhwh = "63959";

            TicketModel.Dryl = 598.08m;

            TicketModel.Htyl = 598.08m;

            TicketModel.Zhtl = 600.00m;

            TicketModel.Ddrs = 6;

            TicketModel.Sj = DateTime.Now;

            //賦值

            txtydmc.Text = TicketModel.Ydmc;

            txtxh.Text = TicketModel.Xh.ToString();

            txtjstd.Text = TicketModel.Jstd.ToString();

            txtynxm.Text = TicketModel.Ynxm;

            txtkhwh.Text = TicketModel.Yhwh;

            txtdryl.Text = TicketModel.Dryl.ToString();

            txthtyl.Text = TicketModel.Htyl.ToString();

            txthtzl.Text = TicketModel.Zhtl.ToString();

            txtddrs.Text = TicketModel.Ddrs.ToString();

 

        }

c)       給排號機小票.txt模板賦值

接下來講的很重要,如何給排號機小票.txt模板賦值,以及修改字體樣式。

   

      /// <summary>

        ///給模板賦值    

   /// </summary>

        /// <param name=" printTicket ">數據源 </param>

        /// <returns></returns>

 

        public List<ContentWithFontModel> GetTempleteDemo(PrintTicketModel printTicket)

        {

 

            StreamReader objReaderFp = new StreamReader("TicketTemplete\\排號機小票.txt", Encoding.UTF8);

            string content = objReaderFp.ReadToEnd();

            //煙點名稱

            content = content.Replace("{ybmc}", printTicket.Ydmc);

            //序號

            content = content.Replace("{xh}", printTicket.Xh.ToString());

            //交售通道 -

            content = content.Replace("{jstd}", printTicket.Jstd.ToString());

            //煙農姓名-

            content = content.Replace("{ynxm}", printTicket.Ynxm);

            //卡號尾號

            content = content.Replace("{yhwh}", printTicket.Yhwh);

            ////當日余量-

            content = content.Replace("{dryl}", (printTicket.Dryl).ToString());

            //合同余量-

            content = content.Replace("{htyl}", printTicket.Htyl.ToString());

            //總合同量; -

            content = content.Replace("{zhtl}", printTicket.Zhtl.ToString());

            //等待人數--

            content = content.Replace("{ddrs}", printTicket.Ddrs.ToString());

            //時間--

            content = content.Replace("{sj}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

            content = content.Replace("\r\n", "\n");

            //將content按照\n分開

            return GetFontChangeTemplete(content.Split('\n'));

        }

 

      /// <summary>

        ///給模板設置字體樣式

        /// </summary>

        /// <param name="contents">模板內容,按照行保存在數組中,以便每行設置字體樣式</param>

        /// <returns></returns>

        private static List<ContentWithFontModel> GetFontChangeTemplete(string[] contents)

        {

            List<ContentWithFontModel> contentWithFontModels = new List<ContentWithFontModel>();

            //設置字體

            Font putongFont = new Font("仿宋", 12, FontStyle.Regular);

            Font disFont = new Font("仿宋", 22, FontStyle.Bold);

            //設置畫刷

            SolidBrush solidBrush = new SolidBrush(Color.Black);

 

            //設置字體

            for (int i = 0; i < contents.Length; i++)

            {

                ContentWithFontModel contentWithFontModel = new ContentWithFontModel();

                if (i == 1)

                {

                    contentWithFontModel.Content = contents[i];

                    contentWithFontModel.FontStyle = disFont;

                    contentWithFontModel.SolidBrushStyle = solidBrush;

                }

                else

                {

                    contentWithFontModel.Content = contents[i];

                    contentWithFontModel.FontStyle = putongFont;

                    contentWithFontModel.SolidBrushStyle = solidBrush;

                }

                contentWithFontModels.Add(contentWithFontModel);

            }

            return contentWithFontModels;

        }

  /// <summary>

   /// 打印內容   字體樣式  刷子樣式

/// </summary>

   public class ContentWithFontModel

    {

        /// <summary>

        /// 內容

        /// </summary>

        public string  Content { get; set; }

        /// <summary>

        /// 字體樣式

        /// </summary>

        public Font FontStyle { get; set; }

        /// <summary>

        /// 刷子樣式

        /// </summary>

        public SolidBrush SolidBrushStyle{ get; set; }

    }

二、調用windows打印機打印

以上內容我們已經完成了模板的內容,模板樣式。現在就是講解如何將模板的內容交給windows打印機打印。

  在窗體的工具箱內有一個控件PrintDocument,可以拖動控件編寫。我這里沒有推動控件,直接使用的PrintDocument類。直接使用PrintDocument要添加引用using System.Windows.Forms;

        /// <summary>

        /// 打印小票

        /// </summary>

        /// <param name="printcontents">帶字體的模型</param>

     private void Print(List<ContentWithFontModel> printcontents)

        {

            PrintDocument printDocument = new PrintDocument();

            printDocument.PrintPage += (sender, e) =>

            {

                int fontheight = 0;

                foreach (var item in printcontents)

                {

                    e.Graphics.DrawString(item.Content, item.FontStyle, item.SolidBrushStyle, new Point(0, fontheight));

                    fontheight += item.FontStyle.Height;

                }

            };

 

            printDocument.Print();

        }

 調用Print方法傳入帶有字體樣式的內容的參數,就可以了。

 

如果打印的模板沒有這么多的樣式變化。代碼還可以更簡便些。。和我寫的加以綜合自己摸索摸索吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM