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
  • 相关阅读:
    火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件
    memcache安装环境:WINDOWS 7
    PHP正则表达式
    968. 监控二叉树 力扣(困难) dfs 官方说DP
    375. 猜数字大小 II 力扣(中等) 区间动态规划、记忆化搜索
    629. K个逆序对数组 力扣(困难) 区间动态规划
    剑指 Offer 51. 数组中的逆序对 力扣(困难) 巧用归并排序算法
    488. 祖玛游戏 力扣(困难) dfs
    16. 最接近的三数之和 力扣(中等) 双指针
    319. 灯泡开关 力扣(中等) 数论
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3577549.html
Copyright © 2011-2022 走看看