IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> MVC 使用ITextSharp来打印数据 -> 正文阅读

[开发测试]MVC 使用ITextSharp来打印数据

MVC 使用ITextSharp来打印数据

最近在把C/S搬到B/S上面,MVC很少做过简单来聊一下在前端做打印

JS代码:

按钮就不放上去了,用平常的<input type:“button” οnclick=“Print()”>就可以,然后加入点击事件

<script>
    //打印按钮
    function Print() {
        window.location.href = "@Url.Action("Print")";
    }
</script>

辅助类:

这里需要在NuGet上下载ITextSharp,版本与项目版本兼容即可
这是我项目里使用的版本
这是

 public class PdfResult : ActionResult
    {
        private string FileName;
        public event DocRenderHandler DocRenderEvent;
        public delegate void DocRenderHandler(ref Document Doc);

        /// <summary>
        /// 将FileName赋值一次
        /// </summary>
        /// <param name="FileName"></param>
        public PdfResult(string FileName)
        {
            this.FileName = FileName;
        }

        /// <summary>
        /// 向页面输出时才会执行该方法
        /// </summary>
        /// <param name="context"></param>
        public override void ExecuteResult(ControllerContext context)
        {
            Document Doc = new Document();
            using (MemoryStream Memory = new MemoryStream())
            {
                PdfWriter pdfWriter = PdfWriter.GetInstance(Doc, Memory);
                if (DocRenderEvent != null)
                    DocRenderEvent(ref Doc);
                HttpResponseBase Response = context.HttpContext.Response;
                Response.Clear();
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
                Response.ContentType = "application/pdf";
                Response.OutputStream.Write(Memory.GetBuffer(), 0, Memory.GetBuffer().Length);
                Response.OutputStream.Flush();
                Response.OutputStream.Close();
                Response.Flush();
            }
            context.HttpContext.Response.End();
        }
    }

后端代码:

这里的数据源是之前保存到Session里的,而且这是我第一次认识到直接将数据流返回到前端,使用location.href来接收,选择文档保存路径之后就直接完成下载的动作

        /// <summary>
        /// 打印PDF
        /// </summary>
        /// <returns></returns>
        public ActionResult Print()
        {
            //获取当前日期
            var nowDate = DateTime.Now.Date.ToString("yyyy年MM月dd日");
            //获取病人名称
            var Name = Session["Name"].ToString();
            //文件名
            string filename = Name + "_" + nowDate + "_" + "手术费用.pdf";
            PdfResult pr = new PdfResult(filename);
            pr.DocRenderEvent += RenderPdfDoc;
            return pr;
        }

        private void RenderPdfDoc(ref Document Doc)
        {
            Doc.SetPageSize(PageSize.A4);
            Doc.SetMargins(60, 60, 20, 40);

            //获取当前日期
            var nowDate = DateTime.Now.Date.ToString("yyyy年MM月dd日");

            #region 相关元素准备
            BaseFont bfChinese = BaseFont.CreateFont(@"C:\Windows\Fonts\simsun.ttc,1", BaseFont.IDENTITY_H,
                BaseFont.NOT_EMBEDDED);
            Font Font16 = new Font(bfChinese, 16);
            Font Font14 = new Font(bfChinese, 14);
            Font Font12 = new Font(bfChinese, 12);
            Font Font12Bold = new Font(bfChinese, 12, Font.BOLD);
            Font Font12Italic = new Font(bfChinese, 12, Font.BOLDITALIC);
            Font Font10Bold = new Font(bfChinese, 10, Font.BOLD);

            Paragraph parag;
            PdfPTable table;
            PdfPTable table1;
            #endregion

            #region 正文
            Doc.Open();
            parag = new Paragraph("费用清单\r\n\r\n", Font16);
            parag.Alignment = Element.ALIGN_CENTER;
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("姓名:" + Session["Name"] + " " + "住院号:" + Session["Code"] + " " + "日期:" + nowDate+ "\r\n\r", Font12Bold));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("合计:"+ Session["LumpSum"].ToString() +"\r\n\r", Font12Bold));
            Doc.Add(parag);

            //列宽比例
            table = new PdfPTable(new float[] { 5, 5, 5, 5, 5 });
            table.WidthPercentage = 100f;
            table.AddCell(new Phrase("费用名称", Font12Bold));
            table.AddCell(new Phrase("执行科室", Font12Bold));
            table.AddCell(new Phrase("单价", Font12Bold));
            table.AddCell(new Phrase("数量", Font12Bold));
            table.AddCell(new Phrase("总价", Font12Bold));
            Doc.Add(table);

            //获取Session
            List<IPFeeRecord> data = Session["IPFeeRecord"] as List<IPFeeRecord>;
            for (int i = 0; i < data.Count; i++)
            {
                table1= new PdfPTable(new float[] { 8, 8, 8, 8, 8 });
                table1.WidthPercentage = 100f;
                table1.AddCell(new Phrase(data[i].ITEM_NAME, Font12Bold));
                table1.AddCell(new Phrase(data[i].EXECUTE_DEPTName, Font12Bold));
                table1.AddCell(new Phrase(data[i].PACKAGE_PRICE.ToString(), Font12Bold));
                table1.AddCell(new Phrase(data[i].EXE_PIECE_QUANTITY.ToString(), Font12Bold));
                table1.AddCell(new Phrase(data[i].APPLY_DTL_SEQ, Font12Bold));
                Doc.Add(table1);
            }

            Doc.Close();
            #endregion
        }

效果图:
在这里插入图片描述
如果本篇文章对您有帮助请点赞分享,谢谢!

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:40:46  更:2021-09-02 11:42:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/11 15:06:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码