zoukankan      html  css  js  c++  java
  • C# PDF打印

    C#中使用iTextSharp生成并下载PDF很方便。

    首先要将iTextSharp的dll下载并引入项目

    主要分成两部分,一部分是PDF的Document生成,另一部分就是将Document输出到页面

    这里分别列出aspx页和MVC中ActionResult的下载方式

    ①aspx

    工具类(只是提供Document的输出)

    using System.Web;
    using iTextSharp.text;
    using System.IO;
    using iTextSharp.text.pdf;
    
    namespace Common
    {
        public class PdfHelper
        {
            public event DocRenderHandler DocRenderEvent;
            public delegate void DocRenderHandler(ref Document Doc);
    
            public void DownLoadPDF(string FileName, HttpContext context)
            {
                Document Doc = new Document();
                HttpResponse Response = context.Response;
    
                using (MemoryStream Memory = new MemoryStream())
                {
                    PdfWriter PdfWriter = PdfWriter.GetInstance(Doc, Memory);
                    if (DocRenderEvent != null)
                        DocRenderEvent(ref Doc);
    
                    #region 文件输出及相关设置
                    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();
                    #endregion
                }
                Response.End();
            }
        }
    }

    下载页面

    using System;
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.Text;
    
    namespace MvcMovie.Common
    {
        public partial class PdfLoad : System.Web.UI.Page
        {
            
            protected void Page_Load(object sender, EventArgs e)
            {
                string FileName = DateTime.Now.ToShortTimeString() + ".pdf";
                PdfHelper ph = new PdfHelper();
                ph.DocRenderEvent += RenderPdfDoc;
                ph.DownLoadPDF(FileName, this.Context);
            }
    
            private void RenderPdfDoc(ref Document Doc)
            {
                Doc.SetPageSize(PageSize.A4);
                Doc.SetMargins(60, 60, 20, 40);
    
                #region 相关元素准备
                BaseFont bfChinese = BaseFont.CreateFont(@"C:windowsfontssimsun.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("相关部分发布的重要通知");
                #endregion
                
                #region 正文
                parag = new Paragraph("------通知------", Font16);
                parag.Alignment = Element.ALIGN_CENTER;
                Doc.Add(parag);
    
                parag = new Paragraph();
                parag.SetLeading(20f, 1f);
                parag.Add(new Chunk("曾经沧海难为水,心有灵犀一点通", Font12Italic));
                Doc.Add(parag);
    
                parag = new Paragraph();
                parag.Add(new Chunk("取次花丛懒回顾,得来全不费工夫", Font10Bold));
                Doc.Add(parag);
    
                parag = new Paragraph();
                parag.Add(new Chunk("      " + DateTime.Now.ToLongDateString(), Font12));
                Doc.Add(parag);
    
                parag = new Paragraph();
                parag.SetLeading(1f, 1f);
                chunk = new Chunk(new StringBuilder().Insert(0, " ", 30).Append("Come On!").ToString(), Font12);
                chunk.SetUnderline(-18f, 1.4f);
                parag.Add(chunk);
                parag.Alignment = Element.ALIGN_JUSTIFIED_ALL;
                Doc.Add(parag);
                
                Doc.NewPage();//换页
    
                table = new PdfPTable(new float[] { 5, 3, 3 });
                table.WidthPercentage = 100f;
                table.AddCell(new Phrase("英语老师签字:
    
    
    
    
    
    
    
    
    ", Font12));
                table.AddCell(new Phrase("同桌签字:", Font12));
                table.AddCell(new Phrase("本人签字:", Font12));
                Doc.Add(table);
    
                parag = new Paragraph();
                parag.SetLeading(-30f, 1.4f);
                parag.Add(new Chunk(new StringBuilder().Insert(0, " ", 60).ToString() + "签字日期:", Font12));
                Doc.Add(parag);
                Doc.Close();
                #endregion
            }
        }
    }

    ②MVC3(以上)版本
    写一个继承自ActionResult的Result类,并且将Document输出写到ExecuteResult中

    using System.Web;
    using System.Web.Mvc;
    using iTextSharp.text;
    using System.IO;
    using iTextSharp.text.pdf;
    
    namespace Common
    {
        public class PdfResult:ActionResult
        {
            private string FileName;
            public event DocRenderHandler DocRenderEvent;
            public delegate void DocRenderHandler(ref Document Doc);
    
            public PdfResult(string FileName)
            {
                this.FileName = FileName;
            }
    
            /// <summary>
            /// 向页面输出时才会执行该方法
            /// </summary>
            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);
                    
                    #region 文件输出及相关设置
                    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();
                    #endregion
                }
                context.HttpContext.Response.End();
            }
        }
    }

    ②调用

    using System;
    using System.Web.Mvc;
    using MvcMovie.Common;
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.Text;
    
    namespace MvcMovie.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index(string name,int? id)
            {
                ViewBag.Message = "欢迎使用 ASP.NET MVC!";
                return View();
            }
    
    
            public ViewResult About()
            {
                return View("About");
            }
    
            public ActionResult DownLoadPdf(int ID)
            {
                string FileName = DateTime.Now.ToShortTimeString()+".pdf";
                PdfResult pr = new PdfResult(FileName);
                pr.DocRenderEvent += RenderPdfDoc;
                return pr;
            }
            
            private void RenderPdfDoc(ref Document Doc)
            {
                //TO DO
                //内容同上
            }
        }
    }
  • 相关阅读:
    查询安装webpack4.0是否成功时提示无法找到的解决方法
    clientHeight—scrollHeight—offsetHeight三者的区别
    onunload事件不触发的探索
    你知道刷社保卡看病买药也能扫二维码支付吗?(以成都市社保卡为例)
    成都市新社保卡线上申请方法(无需线下办理,手机直接搞定)
    jquery实现移动端页面加载后,向上滚动指定距离无效引起的探索
    社保官网查询密码重置及注册(以成都为例)
    社保对线上购买保险时2个你不知道的影响(最后一个真的太坑爹,中招的人肯定不在少数)
    坑爹的京东E卡
    Mongodb(一)
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/3380717.html
Copyright © 2011-2022 走看看