因为最近在作一个医院的收费系统,需要发票打印,而且是套打,请问如何实现?以前没有作过这种小票打印,请高手指点。因为以前只作过报表打印,可是那种感觉很容易实现,可是这种以固定模式打印却不知从何下手了。哪位朋友有源码的最好能贴一点上来,也让我见识一下,少走些弯路。谢谢。

解决方案 »

  1.   

    http://delhpi.ys168.com
    发票类似于支票。
      

  2.   

    打印依靠PringDocument实现,至于纸张设置,由用户在第一次使用时指定(也可以中途更改),但程序必须保存用户的设定,否则每次启动程序时做一次设置太不方便,保存和读取设置的代码参考下面.
            private void SavePrintSetting()
            {
                RegistryKey hKey = Registry.CurrentUser.CreateSubKey(@"Software\xxxx公司\打印设置\3.0");
                RegistryKey subKey = hKey.CreateSubKey(this.GetType().GUID.ToString("B"));
                subKey.SetValue("PaperName", this.m_PrintDoc.DefaultPageSettings.PaperSize.PaperName);
                subKey.SetValue("PaperKind", this.m_PrintDoc.DefaultPageSettings.PaperSize.Kind);
                subKey.SetValue("PaperWidth", this.m_PrintDoc.DefaultPageSettings.PaperSize.Width);
                subKey.SetValue("PaperHeight", this.m_PrintDoc.DefaultPageSettings.PaperSize.Height);
                subKey.SetValue("PaperTop", this.m_PrintDoc.DefaultPageSettings.Margins.Top);
                subKey.SetValue("PaperBottom", this.m_PrintDoc.DefaultPageSettings.Margins.Bottom);
                subKey.SetValue("PaperLeft", this.m_PrintDoc.DefaultPageSettings.Margins.Left);
                subKey.SetValue("PaperRight", this.m_PrintDoc.DefaultPageSettings.Margins.Right);
                subKey.SetValue("PrinterName", this.m_PrintDoc.PrinterSettings.PrinterName);
                subKey.SetValue("Landscape", this.m_PrintDoc.DefaultPageSettings.Landscape ? 1 : 0, RegistryValueKind.DWord);
                subKey.Close();
            }
            private void LoadPrintSetting()
            {
                RegistryKey hKey = null;
                RegistryKey subKey = null;
                bool printResult = false, paperResult = false;
                try
                {
                    hKey = Registry.CurrentUser.OpenSubKey(@"Software\xxxx公司\打印设置\3.0");
                    subKey = hKey.OpenSubKey(this.GetType().GUID.ToString("B"));
                    string pName = subKey.GetValue("PaperName").ToString();
                    System.Drawing.Printing.PaperKind pKind = (System.Drawing.Printing.PaperKind)System.Enum.Parse(typeof(System.Drawing.Printing.PaperKind),subKey.GetValue("PaperKind").ToString());
                    int pWidth = (int)subKey.GetValue("PaperWidth");
                    int pHeight = (int)subKey.GetValue("PaperHeight");
                    string printer = subKey.GetValue("PrinterName").ToString();
                    int landscape = (int)subKey.GetValue("Landscape", 0);
                    foreach (string p in PrinterSettings.InstalledPrinters)
                    {
                        if (p == printer)
                        {
                            this.m_PrintDoc.PrinterSettings.PrinterName = printer;
                            printResult = true;
                            break;
                        }
                    }
                    this.m_PrintDoc.DefaultPageSettings.Landscape = (landscape == 1);
                    foreach (PaperSize pSize in this.m_PrintDoc.PrinterSettings.PaperSizes)
                    {
                        if ((pSize.PaperName == pName) && (pSize.Kind == pKind) && (pSize.Width == pWidth) && (pSize.Height == pHeight))
                        {
                            this.m_PrintDoc.DefaultPageSettings.PaperSize = pSize;
                            paperResult = true;
                            break;
                        }
                    }
                    this.m_PrintDoc.DefaultPageSettings.Margins.Top = (int)subKey.GetValue("PaperTop");
                    this.m_PrintDoc.DefaultPageSettings.Margins.Bottom = (int)subKey.GetValue("PaperBottom");
                    this.m_PrintDoc.DefaultPageSettings.Margins.Left = (int)subKey.GetValue("PaperLeft");
                    this.m_PrintDoc.DefaultPageSettings.Margins.Right = (int)subKey.GetValue("PaperRight");            }
                catch (Exception)
                {
                    printResult = false;
                }
                finally
                {
                    if (subKey != null)
                        subKey.Close();
                    if (hKey != null)
                        hKey.Close();
                }            if ((!printResult) || (!paperResult))
                {
                    this.SavePrintSetting();
                }
            }
      

  3.   

    用自定义尺寸纸张打印了
    这个报表支持:
    http://www.kitesoft.cn