C#:MVC打印PDF文件

在百度上找了许多PDF文件打印,但是符合我需求的打印方式还没看到,所以根据看了https://www.cnblogs.com/TiestoRay/p/3380717.html的范例后,研究了一下,做出来符合自己需求的打印方式分享一下。

1、先要引用一个插件,可以从网上搜索下载就好

2、前端JS,比较简单一句代码,重点放在后台操作。

3、后台代码。

 1 public class PdfResult:ActionResult
 2 {
 3         private string FileName;
 4         public event DocRenderHandler DocRenderEvent;
 5         public delegate void DocRenderHandler(ref Document Doc);
 6 
 7         /// <summary>
 8         /// 将FileName赋值一次
 9         /// </summary>
10         /// <param name="FileName"></param>
11         public PdfResult(string FileName)
12         {
13             this.FileName = FileName;
14         }
15 
16         /// <summary>
17         /// 向页面输出时才会执行该方法
18         /// </summary>
19         /// <param name="context"></param>
20         public override void ExecuteResult(ControllerContext context)
21         {
22             Document Doc = new Document();
23             using (MemoryStream Memory=new MemoryStream())
24             {
25                 PdfWriter PdfWriter = PdfWriter.GetInstance(Doc, Memory);
26                 if (DocRenderEvent != null)
27                     DocRenderEvent(ref Doc);
28                 HttpResponseBase Response = context.HttpContext.Response;
29                 Response.Clear();
30                 Response.Cache.SetCacheability(HttpCacheability.NoCache);
31                 Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
32                 Response.ContentType = "application/pdf";
33                 Response.OutputStream.Write(Memory.GetBuffer(), 0, Memory.GetBuffer().Length);
34                 Response.OutputStream.Flush();
35                 Response.OutputStream.Close();
36                 Response.Flush();
37             }
38             context.HttpContext.Response.End();
39         }
40 }
        public ActionResult Print(string OrderID)
        {
            string FileName = OrderID + ".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);

            #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;
            //Chunk chunk;
            PdfPTable table;
            #endregion
            
            #region 文件标题
            Doc.Open();
            Doc.AddAuthor("TiestoRay");
            Doc.AddTitle("POP项目供应商结算单");
            #endregion
            
            #region 正文
            parag = new Paragraph("京东商城\r\nPOP项目供应商结算单", Font16);
            parag.Alignment = Element.ALIGN_CENTER;
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("供应商名称:", Font12Bold));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("结算单编号:", Font12Bold));
            parag.Add(new Chunk("63930272255\r\n", Font12));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("店铺名称:", Font12Bold));
            parag.Add(new Chunk("MOKO数码配件旗舰店\r\n", Font12));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("结算期间:", Font12Bold));
            parag.Add(new Chunk("2017-11-30 至 2017-11-30\r\n", Font12));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("基准币种:", Font12Bold));
            parag.Add(new Chunk("元\r\n\r\n", Font12));
            Doc.Add(parag);
            
            parag = new Paragraph();
            parag.Add(new Chunk("结算信息\r\n\r\n", Font16));
            Doc.Add(parag);

            table = new PdfPTable(new float[] { 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));
            Doc.Add(table);

            table = new PdfPTable(new float[] { 5, 5, 5, 5 });
            table.WidthPercentage = 100f;
            table.AddCell(new Phrase("SOP", Font12));
            table.AddCell(new Phrase("POP", Font12));
            table.AddCell(new Phrase("货款:1097.70, 佣金:-84.50", Font12));
            table.AddCell(new Phrase("1013.2", Font12));
            Doc.Add(table);

            table = new PdfPTable(new float[] { 3, 3, 3, 3 });
            table.WidthPercentage = 100f;
            table.AddCell(new Phrase("", Font12));
            table.AddCell(new Phrase("", Font12));
            table.AddCell(new Phrase("", Font12));
            table.AddCell(new Phrase("1013.2", Font12));
            Doc.Add(table);

            //Doc.NewPage();//换页

            parag = new Paragraph();
            parag.Add(new Chunk("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n供应商开票信息\r\n\r\n", Font16));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("公司名称:", Font12Bold));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("纳税人识别号:", Font12Bold));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("地址、电话:", Font12Bold));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("开户行及账号:", Font12Bold));
            Doc.Add(parag);

            parag = new Paragraph();
            parag.Add(new Chunk("尊敬的供应商,如数据核对无误,请及时确认结算单。\r\n\r\n", Font12Bold));
            parag.Add(new Chunk("供应商签章(公章)\r\n\r\n\r\n\r\n\r\n\r\n\r\n", Font12Bold));
            parag.Add(new Chunk("如有结算问题,可拨打商家客服电话,或联系商家在线客服咨询。", Font16));
            Doc.Add(parag);
            Doc.Close();
            #endregion
        }

4、配上效果图:

 

 以上方法可以个人分享研究!

不可做商业项目,违者必究!

posted @ 2018-01-10 15:14  安挚  阅读(1753)  评论(0编辑  收藏  举报