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(), , 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(, , , ); #region 相关元素准备
BaseFont bfChinese = BaseFont.CreateFont(@"C:\windows\fonts\simsun.ttc,1", BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font Font16 = new Font(bfChinese, );
Font Font14 = new Font(bfChinese, );
Font Font12 = new Font(bfChinese, );
Font Font12Bold = new Font(bfChinese, , Font.BOLD);
Font Font12Italic = new Font(bfChinese, , Font.BOLDITALIC);
Font Font10Bold = new Font(bfChinese, , 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(, " ", ).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[] { , , });
table.WidthPercentage = 100f;
table.AddCell(new Phrase("英语老师签字:\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", 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(, " ", ).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(), , 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
//内容同上
}
}
}

C# PDF打印的更多相关文章

  1. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  2. 基于iTextSharp的PDF操作(PDF打印,PDF下载)

    基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...

  3. NetSuite实现pdf打印中的条形码的功能

    2020-11-27 提起NS,在程序员这一块应该不怎么被人知道,算是比较小众的一门技术了,毕竟Netsuite兴起的时间算不上早,进入中国的时间更晚,除了从事这一块的程序员,可能都没有见过,恰好我是 ...

  4. .Net下的PDF打印

    简单研究了一下.Net下的PDF打印,一路发现了很多小坑. 第三方组件 这里使用的解析PDF的组件是mupdf,特点和C#调用在 这里 有介绍. 实现的功能 支持页面大小.边距.打印机选择.打印机dp ...

  5. 驰骋CCFlow开源工作流程引擎如何设置PDF打印

    前言 经常有驰骋CCFlow爱好者朋友提问关于打印相关问题.在这篇博文中大家介绍一下工作流引擎CCFlow的HTML打印和PDF打印,针对Java版本和.NET版本有不同的操作步骤,包括开关设置.水印 ...

  6. Java 创建PDF打印小册子

    概述 PDF打印小册子是指将PDF格式文档在打印成刊物前需要提前进行的页面排版,以便在打印后装订成册.下面以Java代码展示如何来实现.这里调用Free Spire.PDF for Java中的Pdf ...

  7. 重命名PDF打印文件名

    Odoo系统默认打印出来的PDF文件都是以当前文档模型对象对应的模板文件名命名的,对用户来说,这样的命名很不友好. 我们希望能够将打印出来的文件名以单号命名,下面是实现这种目的的方法. 在report ...

  8. 两页pdf打印为一页,并且放大(打印英文pdf常用)

    多很英文书籍都是小书,若我们直接打印它的pdf会很厚,比如我要打印一本 thinking in C++,就要800+页.不如把两页打成一页.但是打成一页之后又太小了,需要放大.具体方法如下:   前提 ...

  9. pdf打印乱码问题

    问题: 使用Adobe Reader将一份pdf文件通过我的虚拟打印机输出后(输出的是中间文件,等同于EMF文件),查看的时候发现有时候是乱码.最简单的必现步骤: 1.使用Adobe Reader打开 ...

  10. java原装代码完成pdf在线预览和pdf打印及下载

    这是我在工作中,遇到这样需求,完成需求后,总结的成果,就当做是工作笔记,以免日后忘记,当然,能帮助到别人是最好的啦! 下面进入正题: 前提准备: 1. 项目中至少需要引入的jar包,注意版本: a)  ...

随机推荐

  1. Python装饰器由浅入深

    装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...

  2. .Net魔法堂:史上最全的ActiveX开发教程——开发篇

    一.前言 在设计某移动内部自动化运维平台时,经综合考虑终端机性能和功能需求等因素后,决定采用B/S模式,并且浏览器通过ActiveX组件实现与服务器Agent作P2P的通讯.好处,整个平台以网页形式存 ...

  3. FXForms,自动生成iOS表单

    1.简介 FXForms是一个简单的表单提交框架,他的作者是鼎鼎大名的 Nick Lockwood,你也许听说过他的其他的一些框架,比如 iCarousel. 为什么使用FxForms? 表单处理简单 ...

  4. UnityShader快速上手指南(四)

    简介 由于其他项目中断了几天更新,继续~~ 这一篇主要是讲光照的(包含漫反射和高光以及多光源的处理) 还是先来看看具体效果(多光源后面单独展示) 有了基本的光照处理之后越来越有立体感了有不有 ╮(╯▽ ...

  5. margin的使用方法与技巧

    1.margin还可以用来做平移,作用类似translate哈哈.将元素设成absolute后就可以用margin随便平移他了,既不像relative那样要霸占空间,又不用为父元素设置relative ...

  6. 【百度SEO优化】如何让蜘蛛爬行你的网站

    大家都知道,现在做网站简单,但是推广就比较困难了,可能一些商家引入投资,直接烧钱做广告来推广,但是对于一些小站长,是没有那么多资金的.因此我们就要懂得一些SEO优化的知识了,简单介绍一下: 怎么让百度 ...

  7. 不可或缺 Windows Native (5) - C 语言: 数组

    [源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...

  8. 【NOIP训练】【Tarjan求割边】上学

    题目描述 给你一张图,询问当删去某一条边时,起点到终点最短路是否改变. 输入格式 第一行输入两个正整数,分别表示点数和边数.第二行输入两个正整数,起点标号为,终点标号为.接下来行,每行三个整数,表示有 ...

  9. 内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统

    linux内核最小系统,使用内核版本:https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.8.1.tar.bz2 1,FL2440板子的基本硬件: ...

  10. yii2.0配置以pathinfo的形式访问

    yii2.0默认的访问形式为:dxr.com/index.php?r=index/list,一般我们都会配置成pathinfo的形式来访问:dxr.com/index/list,这样更符合用户习惯. ...