zoukankan      html  css  js  c++  java
  • 套打

     

    水晶报表实现套打

    对于套打的情况,一般出现在以下两种情况: 
    1:清单类打印,一般可能是已经是在已经印刷好的纸张上打印 
    2:单据发票类,一般单据格式固定,如每张打印5行数据,而且这种格式是已经印刷好的,当然机打发票除外。 

    我们以第2种情况为例进行说明,因为第2种会了第1种也自然就明白了 
    在这里我们使用程序代码+报表中设置背景图片的方式来实现。 

    1、纸张尺寸类型很难控制客户端的,那就用A4纸,计算设置较大右边距和下边距,以适合你的单据尺寸;

    2、页面设置,精确计算左边距与上边距,放好你需打印的组件与不需打印的组件(Top与Left);

    3、窗体上,三个控件:CrystalReport控件、CrystalReportViewer控件和PrintDialog控件,让CrystalReportViewer控件的ShowPrintButton=false,以免客户从它启动打印;

    4、在制作报表的时候,把你不需要打印的部分使用图片代替。

    如下图。

     

    使用了图片来代替固定数据。如上图中的“仓储企业名称”等标题。

    5、报表打印类:

    复制代码
    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Text;
    
    using Easipay.Controls.Printer;
    
    using System.Drawing.Printing;
    
     
    
    namespace Easipay.WGQ.Warehouse.Report
    
    {
    
        public class ReportAllocateBLM : ReportBase, IPrintReport
    
        {
    
            // <summary>
    
            /// 生成报表对象
    
            /// </summary>
    
            /// <returns></returns>
    
            public object Report()
    
            {
    
                return new rptAllocateBLMTHD();
    
            }
    
         
    
            /// <summary>
    
            /// 打印预览, 设置报表数据的方法:
    
            /// </summary>
    
            /// <param name="rpt">报表</param>
    
            /// <param name="reportData">需要打印的数据</param>
    
            /// <param name="boolBackgroupPic">是否打印背景图片</param>
    
            public void PrePrint(ref CrystalDecisions.CrystalReports.Engine.ReportDocument rpt, object reportData, bool boolBackgroupPic)
    
            {
    
                ProtionOutHeadReport info = GetDataSet(reportData);
    
     
    
                AddBarNo(ref rpt);
    
     
    
                rpt.SetDataSource(info);
    
                System.Drawing.Printing.PrintDocument pd = new PrintDocument();
    
                System.Drawing.Printing.PaperSize paperSize = new System.Drawing.Printing.PaperSize("ProtionInHeadReport", 827, 1200);
    
            }
    
            ///<summary>
    
            ///生成报表所需要的DataSet
    
            ///</summary>
    
            ///<param name="reportData">由界面中传过来的数据</param>
    
            ///<returns></returns>
    
            private ProtionOutHeadReport GetDataSet(object reportData)
    
            {
    
                ProtionOutHeadReport outBillDs = new ProtionOutHeadReport();
    
                Easipay.WGQ.Entitys.ProtionOutHead head = reportData as Easipay.WGQ.Entitys.ProtionOutHead;
    
                if (head != null)
    
                {
    
                    FillDataTable<Easipay.WGQ.Entitys.ProtionOutHead>(GetHeadList(head), outBillDs.ProtionOutHead);
    
                }
    
                if (head.ProtionOutODetail != null)
    
                {
    
                    FillDataTable<Easipay.WGQ.Entitys.ProtionOutODetail>(GetDetailList(head), outBillDs.ProtionOutODetail);
    
                }
    
                if (head.ProtionOutMDetail != null)
    
                {
    
                    FillDataTable<Easipay.WGQ.Entitys.ProtionOutMDetail>(GetMDetailList(head), outBillDs.ProtionOutMDetail);
    
                }
    
                return outBillDs;
    
            }
    
            /// <summary>
    
            /// 获取报表头
    
            /// </summary>
    
            /// <param name="head">进区凭单表头信息</param>
    
            /// <returns></returns>
    
            private List<Easipay.WGQ.Entitys.ProtionOutHead> GetHeadList(Easipay.WGQ.Entitys.ProtionOutHead head)
    
            {
    
                List<Easipay.WGQ.Entitys.ProtionOutHead> list = new List<Easipay.WGQ.Entitys.ProtionOutHead>();
    
                list.Add(head);
    
                return list;
    
            }
    
            /// <summary>
    
            /// 获取报表体
    
            /// </summary>
    
            /// <param name="head">进区凭单带表体的表头信息类</param>
    
            /// <returns></returns>
    
            private List<Easipay.WGQ.Entitys.ProtionOutODetail> GetDetailList(Easipay.WGQ.Entitys.ProtionOutHead head)
    
            {
    
                List<Easipay.WGQ.Entitys.ProtionOutODetail> list = new List<Easipay.WGQ.Entitys.ProtionOutODetail>();
    
                foreach (Easipay.WGQ.Entitys.ProtionOutODetail item in head.ProtionOutODetail)
    
                {
    
                    list.Add(item);
    
                }
    
     
    
                return list;
    
            }
    
            /// <summary>
    
            /// 获取报表体
    
            /// </summary>
    
            /// <param name="head">进区凭单带表体的表头信息类</param>
    
            /// <returns></returns>
    
            private List<Easipay.WGQ.Entitys.ProtionOutMDetail> GetMDetailList(Easipay.WGQ.Entitys.ProtionOutHead head)
    
            {
    
                string pid = string.Empty;
    
                List<Easipay.WGQ.Entitys.ProtionOutMDetail> list = new List<Easipay.WGQ.Entitys.ProtionOutMDetail>();
    
                foreach (Easipay.WGQ.Entitys.ProtionOutMDetail item in head.ProtionOutMDetail)
    
                {                
    
                    pid = item.pid;
    
                 if (pid=="2")
    
                 {
    
                     list.Add(item);
    
                 }
    
                    
    
                }
    
    //每页要打印八条记录,如果不足8条,则补空行
    
                while (list.Count < 8)
    
                {
    
     
    
                    Easipay.WGQ.Entitys.ProtionOutMDetail detail = new Easipay.WGQ.Entitys.ProtionOutMDetail();
    
                    detail.pid = pid;
    
                    System.Threading.Thread.Sleep(1);
    
              
    
                    detail.id = (DateTime.UtcNow.Ticks % 100000000000).ToString();               
    
                    list.Add(detail);
    
                }
    
                return list;
    
            }
    
            string m_PrintTypeBarName;
    
            /// <summary>
    
            /// 报表打印类型
    
            /// </summary>
    
            public string PrintTypeBarName
    
            {
    
                get
    
                {
    
                    if (string.IsNullOrEmpty(m_PrintTypeBarName))
    
                    {
    
                        return "分拨货物提货单";
    
                    }
    
                    return m_PrintTypeBarName;
    
                    
    
                }
    
                set
    
                {
    
                    m_PrintTypeBarName = value;
    
                }
    
            }
    
        /// <summary>
    
            /// 按需要隐藏报表上的某些控件,这里隐藏的都是图片控件,其他的可以自行添加:
    
            /// </summary>
    
     
    
            public void HidePicture(ref CrystalDecisions.CrystalReports.Engine.ReportDocument rpt)
    
            {
    
                try
    
                {
    
                    foreach (CrystalDecisions.CrystalReports.Engine.Section section in rpt.ReportDefinition.Sections)
    
                    {
    
                        foreach (CrystalDecisions.CrystalReports.Engine.ReportObject rptObject in section.ReportObjects)
    
                        {
    
                            if (rptObject is CrystalDecisions.CrystalReports.Engine.PictureObject)
    
                            {
    
                                //图片背景
    
                                (rptObject as CrystalDecisions.CrystalReports.Engine.PictureObject).ObjectFormat.EnableSuppress = true;
    
                            }
    
                        }
    
                    }
    
     
    
                }
    
                catch
    
                {
    
                }
    
            }
    
     
    
        }
    
    }
    
     
    
    
    
    
    6、打印方法:
    /// <summary>
    
    /// 打印报表
    
    /// </summary>
    
    /// <param name="strPrintName">打印机名称</param>
    
    /// <param name="shInt">打印份数</param>
    
    /// <returns>true成功,false失败</returns>
    
    private bool blnPrint(string strPrintName,string shInt)
    
    {
    
    bool blnPrintScuss=false;
    
    int intCopies=0;
    
    try
    
    {
    
    intCopies=int.Parse(shInt);
    
    }
    
    catch
    
    {
    
    intCopies=1;
    
    }
    
    try
    
    {
    
                    if (ipr == null)
    
                    {                  
    
                        MessageBox.Show("打印报表出错");
    
                        blnPrintScuss = false;
    
                        return blnPrintScuss;
    
                    }
    
    // m_BillNewRpt.PrintOptions.PaperSize=CrystalDecisions.Shared.PaperSize.PaperA4;
    
                    ipr.HidePicture(ref m_BillNewRpt);
    
    m_BillNewRpt.PrintOptions.PrinterName = strPrintName;
    
    m_BillNewRpt.PrintToPrinter(intCopies,false,1,m_intMaxPage);
    
    blnPrintScuss=true;
    
    }
    
    catch (Exception ex)
    
    {
    
    blnPrintScuss=false;
    
    MessageBox.Show("打印报表出错:"+ex.Message);
    
    }
    
    return blnPrintScuss;
    
    }
    复制代码

     

    7、套打,只打印数据的效果。如下图。

     

     

     

    8、非套打,全部打印的效果。如下图。

     

     

     
     
    分类: 水晶报表
     

    、Google Code Prettify:实现代码高亮的JS库

     

    介绍

    • code prettify 解释为 “代码修饰”。
    • 他由JS代码和CSS代码构成,用来高亮显示HTML页面中的代码。
    • 支持:C, Java, Python, Bash, HTML, XML, Javascript, Makefiles, Ruby, PHP, Awk, Perl, Basic, Clojure, CSS, Dart, Erlang, Go, Haskell, Lisp, Scheme, LLVM, Lua, Matlab, Pascal, R, Scala, SQL, LaTeX等语言。

    开始使用

    • 在使用之前我建议将prettify.css中 li 的样式中添加:list-style-type:decimal 使得每行都有行号,而不是每5行有一个号。
    • 加入主要的CSS文件和JS文件:
    <linkrel="stylesheet"href="css/prettify.css"/><!-- 设置代码主题,此文件为默认主题,你可以换成其他主题-->
    <scriptsrc="js/prettify.js"type="text/javascript"></script>
    • 在<body>标签中加入onload="prettyPrint();"
    <bodyonload="prettyPrint()">
    • 将代码放在<pre class="prettyprint linenums">标签内,其中 linenums 表示为代码添加行号,可以不写。
    • 注意:像html中的特殊字符需要转义,比如<a>应该写成 &lt a &gt

    例子

    代码主题选择

     

    默认在prettify中有5种选择:

    • prettify.css
    • sunburst.css
    • desert.css
    • doxy.css
    • sons-of-obsidian.css

    比如你想使用sunburst.css,则我们只需要将:

    <linkrel="stylesheet"href="css/prettify.css"/>

    替换成

    <linkrel="stylesheet"href="css/sunburst.css"/>

    扩展样式可以从 http://jmblog.github.io/color-themes-for-google-code-prettify/ 下载。

    语言支持

    • prettify默认支持类C语言(如java等)等,我们可以通过添加额外的JS文件来使得prettify支持该语言的代码高亮(额外的JS文件从此处下载)。比如添加 lang_go.js 并<pre class="prettyprint lang_go">可以使得支持go语言。

    参考文献

    [1] 官方文档:http://google-code-prettify.googlecode.com/svn/trunk/README.html

    [2] 扩展的Prettify主题CSS样式:http://jmblog.github.io/color-themes-for-google-code-prettify/

    [3] 代码格式化工具:http://tool.oschina.net/codeformat

    作者:xiazdong
    出处:http://www.cnblogs.com/xiazdong
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
    标签: Web
  • 相关阅读:
    java的堆和栈
    概率题
    并发复习在回顾
    hashmap和hashtable
    StringBuilder和StringBuffer
    WinSCP 工具
    网络桥接注意问题。
    虚拟机网络设置
    Spring任务计划
    Spring任务执行器(TaskExecutor)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3577549.html
Copyright © 2011-2022 走看看