c# vs2013 制作水晶报表并导出为 pdf

news/2025/1/12 21:57:56/

一两年前接触的,当时没有记录,现在把他写下来。
vs2013制作水晶报表,应该要用到插件安装,可以自行搜索安装插件。
在Views/RPT文件夹下创建.rpt后缀的水晶报表文件(这里的文件夹位置根据自身随意更改)。
在Data文件夹下(文件夹位置根据自身随意更改),创建DataSet数据集
在这里插入图片描述
创建好后,在页面右击Add-DataTable添加表,更改datatable的名称,同样在表内右击Add-Column添加列,输入列明(自定义)
在这里插入图片描述

在.rpt报表文件页面,先将刚刚创建的DataSet的表导进来。在左边的导航,右击 Database Fields,选择Database Expert
在这里插入图片描述
我的连接-DataSet1-Packing,点击>按钮,将该datatable表导进来,确定。待会就可以拖拉这个表里的列。
在这里插入图片描述

在里面画表格。改字体、字号大小、画线、不用到的报表头之类的就隐藏掉等。我这里是一个已经画好的表格,在页眉部分用到了分组功能,(为了让表格头不循环,表格体 列要循环显示,就将表的id作为分组名 来达到这样的目的)。
在这里插入图片描述
填充数据至表格,并导出为pdf。(我用的是一般处理程序,有什么不同根据自身修改)
后端代码,前端调用PrintPacking方法

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using Newtonsoft.Json;public void PrintPacking(HttpContext context)
{try{string rptName = "PKGTAB";//.rpt报表文件名称List<数据库表名> list = new List<数据库表名>();//源数据表DataSet1 ds1 = new DataSet1();//实例化数据集//分箱数List<int> _countr = list1.Select(t => t.COUNTR).Distinct().ToList();if (list1.Count > 0 && head.Count > 0){foreach (var item in list){//循环将数据添加进去ds1.Packing.AddPackingRow(item.CTN_NO, item.ITEM_NO, item.ITEM_DESC, item.QUANTITY, item.UOM_CODE, item.ITEM_REV, item.ATTR21, item.ATTR29, item.NOTE1, item.SO_NUMBER,item.qrcode, item.ATTR23);}m_responseData = new PrintHandler().ExportPDF(ds1, rptName);}}catch (Exception ex){}string jsonString = JsonConvert.SerializeObject(m_responseData);//Json序列化,JSON对象转成JSON字符串context.Response.Write(jsonString);
}
//导出PDF格式
private ReportDocument docReport = new ReportDocument();//全局变量 私有
//DataSet1 ds1
//rptName:.rpt水晶报表文件的名称
public bool ExportPDF(DataSet1 ds1, string rptName)
{bool flg=false;if (ds1 != null && !string.IsNullOrEmpty(rptName)){try{string _rptName = HttpContext.Current.Server.MapPath("/Views/RPT/" + rptName + ".rpt");docReport.Load(_rptName);docReport.Database.Tables[0].ApplyLogOnInfo(CryReport.GetLogonInfo());docReport.SetDataSource(ds1);DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();docReport.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;docReport.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;string filePath = HttpContext.Current.Server.MapPath(@"/" + rptName + ".pdf");diskOpts.DiskFileName = filePath;docReport.ExportOptions.DestinationOptions = diskOpts;docReport.Export();docReport.Dispose();flg=true;//m_responseData = new ResponseData(true, rptName, string.Format("成功输出文件{0}.pdf.", rptName));}catch (Exception ex){}}else{m_responseData = new ResponseData(false, "报表数据源或报表名为空");}return flg;
}

前端:

$.ajax({type: 'post',async: false,url: '',success: function (data) {var obj = eval('(' + data + ')');if (obj.Success) {var filename = "PKGTAB";var target = "/Views/POP/File?filename=" + filename + ".pdf";//新建一个页面File.aspx 我这边放在/Views/POP/目录下window.open(target);//打开一个新页面将pfd显示出来error.hide();} else {error.show().html(obj.Message);}}
});

新建的File.aspx页面,打开File.aspx.cs页面,protected void Page_Load(object sender, EventArgs e)函数改成如下:

protected void Page_Load(object sender, EventArgs e){string _fileName = Request.QueryString["filename"];string filePath = Server.MapPath(@"/" + _fileName);if (!IsPostBack){//PDFPreview.Priview(this, filePath);//判断文件的存在System.Web.UI.Page p = this;if (System.IO.File.Exists(filePath)){p.Response.ContentType = "Application/pdf";string fileName = filePath.Substring(filePath.LastIndexOf('\\') + 1);p.Response.AddHeader("content-disposition", "filename=" + fileName);p.Response.WriteFile(filePath);p.Response.End();}}}

打开File.aspx.designer.cs,public partial class File方法改成如下:

public partial class File
{/// <summary>/// form1 control./// </summary>/// <remarks>/// Auto-generated field./// To modify move field declaration from designer file to code-behind file./// </remarks>protected global::System.Web.UI.HtmlControls.HtmlForm form1;
}

效果
在这里插入图片描述


http://www.ppmy.cn/news/169504.html

相关文章

笔记本命名规则

笔记本命名规则 本本交流 2009-11-08 20:13 阅读43 评论0 字号&#xff1a; 大 大 中 中 小 小 联想的产品线规划 2008年&#xff0c;对于联想来说是值得纪念的一年。一方面&#xff0c;它作为北京奥运会的顶级赞助商&#xff0c;让全世界对Lenovo这个品牌有了更多的了解…

【Spring】— 动态SQL :<choose>、<when>和<otherwise>元素

<choose>、<when>和<otherwise>元素 在使用<if>元素时&#xff0c;只要test属性中的表达式为true&#xff0c;就会执行元素中的条件语句&#xff0c;但是在实际应用中&#xff0c;有时只需要从多个选项中选择一个执行。例如&#xff0c;若用户姓名不为…

AIGC周报|30秒定制一个文生图模型;60美元让AI玩转《我的世界》;手机版“文生图”模型:2秒不到出一张图

AIGC&#xff08;AI Generated Content&#xff09;即人工智能生成内容。近期爆火的 AI 聊天机器人 ChatGPT&#xff0c;以及 DallE 2、Stable Diffusion 等文生图模型&#xff0c;都属于 AIGC 的典型案例&#xff0c;它们通过借鉴现有的、人类创造的内容来快速完成内容创作。 …

滴滴和华为5年,分享一下真实的划水经验....

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入华为&#xff0c;之后跳槽到了滴滴&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次晋升&#xff0c;换了一家公司&#xff0c;有…

台灯等级AAA和AA有什么差别?台灯照度国家aa标准是什么

根据GB/T 9473-2017《读写作业台灯性能要求》&#xff0c;国家将护眼灯的照度和均匀度按质量的高低划为了国AA和国A两个等级&#xff0c;具体来讲&#xff0c;以出光面的中心投影点为圆心&#xff0c;半径300mm以内的范围&#xff0c;照度大于300lx就是国A级&#xff0c;大于50…

[buuctf] crypto全解——前84道(不建议直接抄flag)

buuctf crypto 1.MD52.Url编码3.一眼就解密4.看我回旋踢5.摩丝6.[BJDCTF 2nd]签到-y1ng7.password8.变异凯撒9.Quoted-printable10.Rabbit11.篱笆墙的影子12.RSA13.丢失的MD514.[BJDCTF 2nd]老文盲了15.Alice与Bob16.rsarsa17.大帝的密码武器18.Windows系统密码19.[BJDCTF 2nd]…

【菜鸟必看】CSDN博客字体颜色编码大全,前端颜色编码,都在这里了!!

Markdown是一种可以使用普通文本编辑器编写的标记语言&#xff0c;通过类似HTML的标记语法&#xff0c;它可以使普通文本内容具有一定的格式。但是它本身是不支持修改字体、字号与颜色等功能的&#xff01; CSDN-markdown编辑器是其衍生版本&#xff0c;扩展了Markdown的功能&a…

TheDAO悲剧重演,SpankChain重入漏洞分析

前言 在10月8日&#xff0c;区块链项目方SpankChain在medium上发表了一篇文章&#xff0c; 并表明其受到了攻击&#xff0c;导致损失了160多个ETH和一些Token&#xff0c;这次攻击事件&#xff0c;相对来说损失金额是较小的&#xff0c;约4万美元&#xff0c;不过值得一提的是…