关于打印(c#套打...)

  今天经理让写一个套打的程序?

什么是套打呀,没有用过,也不小的,于是百度一下,知道了,是什么意思?

 

在电算化会计工作中,几乎所有的由计算机生成的会计档案都应当按照会计制度规定的格式进行输出设计。例如各类帐本和记帐凭证等。通常,这些档案的打印输出处理方式有两种:

  第一种:非套打方式------根据会计软件生成的应输出的档案,打印时,既打印应当输出的数据,也将帐本上印刷的格线打印出来。这种方式适用于在无痕迹的白纸上打印输出会计档案。   第二种:套打方式------在这种方式下,会计软件的生产商必须在生产会计软件的同时,配套 生产既符合会计制度规定又满足该种会计软件输出要求的印有格线、格式固定的空白帐证和报表。电算会计在打印输出会计档案时,只套用现有格式打印应当输出的 数据,并不将帐本上印刷的格线打印出来。这样,提高了打印输出效率,降低了打印机损耗,节约了打印成本。   目前,一些较成熟的会计软件同时提供了套打和非套打两种会计档案打印输出方式,例如金蝶、用友等财务软件。   当然,这组概念也可以用于非会计软件的其他软件设计当中。

 

这意思我们在平时生活中都用过的,车票了,条形码,什么的,等等,都有...

 

 

   在网上看了下,实现的过程,建了一个打印操作的类,具体的实现方法如下:

 

PublicPrint.cs 打印操作类

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Drawing;

namespace WindowsFormsPing
{
    class PublicPrint
    {     
        public PublicPrint()
        {
          
        }

        public void Postion(Graphics e, DataTable dt)
        {
            int x = 60;//x坐标

            int y = 50;//y坐标

            Font fontNormalContent = new System.Drawing.Font("华文楷体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));

            Pen pen = new Pen(Color.Black, 1);

            for (int i = 0; i < dt.Rows.Count; i++)
            {

                string wpmc = dt.Rows[i]["MC"].ToString();//名称

                string wpgg = dt.Rows[i]["GG"].ToString();//规格

                string wpdw = dt.Rows[i]["DW"].ToString();//单位

                string wpsl = dt.Rows[i]["SL"].ToString();//数量

                string wpdj = dt.Rows[i]["DJ"].ToString();//单价

                string wpje = dt.Rows[i]["JE"].ToString();//金额

                string sjxx = DateTime.Parse(dt.Rows[i]["DJSJ"].ToString()).ToShortDateString();//时间



                e.DrawString(wpmc + " " + wpgg, fontNormalContent, Brushes.Black, x, y);

                e.DrawString(wpdw, fontNormalContent, Brushes.Black, x + 80, y);

                e.DrawString(wpsl, fontNormalContent, Brushes.Black, x + 115, y);

                e.DrawString(wpdj, fontNormalContent, Brushes.Black, x + 160, y);



                //写入时间

                if (i == 0)
                {

                    string year = sjxx.Substring(2, 2);

                    string month = sjxx.Substring(5, 2);

                    string day = sjxx.Substring(8, 2);

                    e.DrawString(year, fontNormalContent, Brushes.Blue, 150, 25);

                    e.DrawString(month, fontNormalContent, Brushes.Blue, 170, 25);

                    e.DrawString(day, fontNormalContent, Brushes.Blue, 190, 25);

                }

                y += 30;

            }
        }
    }
}

 

 

 

页面调用.cs类:

 

        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (printDialog1.ShowDialog() == DialogResult.OK)
            {
                printDocument1.PrinterSettings = printDialog1.PrinterSettings;

                printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
                printDocument1.Print();

            }
        } 


        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Graphics g = e.Graphics;

            DataSet ds = new DataSet();//绑定数据源
            PublicPrint p = new PublicPrint();
            p.Postion(g, ds.Tables[0]);

        } 

 

 

以上代码就是.有从别人 那拿的,呵呵,也有自己改些, 记录下.

 

 Q: 还有关于e.Graphics.Drawing()中X.Y的位,没有一下子定好的位置,问朋友们说要慢慢的调才能出的来,如果是有规律的套打,还方便于实现,过于复杂的,是不是要体现出,另一种套打,就是动态生成线和格格. 有操作过的朋友可以一块讨论下!

 

 


posted @ 2011-05-23 15:22  凡海雨  阅读(1472)  评论(0编辑  收藏  举报