没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:我只采一朵|2014-04-02 11:30:01.000|阅读 2399 次
概述:本文教你如何实现水晶报表套打发票。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
经常有人在论坛里面询问水晶报表套打的问题,比如如何精准打印发票,如何配置报表数据源,如何选择最佳套打方案等等。下面我就来分享一下水晶报表如何套打的一些经验,说得不全面的地方还请见谅。
水晶报表套打一般分为两种情况:
我们以第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 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、非套打,全部打印的效果。如下图:

转自://www.cnblogs.com/chillsrc/p/3577290.html
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ke049m.cn
文章转载自:慧都控件



在使用Parasoft C/C++test执行BugDetective数据流分析时,可能会遇到用户自定义的资源API,那在这种情况下,若要判断是否存在资源问题,如资源泄露等,则需要手动配置测试配置。
大型SaaS系统的自动化测试常常受制于界面变化快、结构复杂、加载机制多变等因素。从元素识别到脚本管理,SmartBear TestComplete帮助Salesforce建了可靠的自动化测试体系。
BarTender 标签管理系统,正是帮助企业轻松实现 GS1 标准化标签设计、编码生成与信息联动的强大工具。
Parasoft C/C++test 是一款功能强大的 C/C++ 软件测试工具,集成了静态代码分析、单元测试、集成测试和覆盖率分析等功能,单元测试作为其关键功能之一,为了适配多样化的目标部署环境,C/C++test 设计了灵活的测试结果收集机制。通过Socket通讯方式来收集单元测试结果,从而扩展其测试覆盖范围与应用场景。
相关产品
该产品很容易地被嵌入到一个Crystal Report中,它是一个独立的、完整的、与报表一起使用的Crystal条形码生成器。
最新文章 MORE
半岛外围网上直营相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
半岛外围网上直营