原文 [ASP.NET]以iTextSharp手繪表格並產生PDF下載

大家使用iTextSharp的機緣都不太一樣, 由於單位Crystal Report的License數量有限主管要我去找一個免費產生PDF方法, 避免Crystal Report的License使用過多, 於是乎就找上了iTextSharp.

Crystal Report 與 iTextSharp比較表

  Crystal Report iTextSharp
視覺化界面 YES NO
轉換成PDF YES YES
費用 YES NO
 
第一次總是特別辛苦的, 為了畫出一張收據, 沒有視覺化界面的幫忙, 透過大腦的想像, 終於完成了任務, 但是對於使用Crystal Report的老手們, 應該相當不習慣, 因為看不見畫的東西, 對他們是不方便的, 但可以省錢, 我想老闆不會說不, 最後我把我學習的成果做成一個範例.
 
請記得先去網站下載iTextSharp.dll這個檔案加入參考 
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Web;
05 using System.Web.UI;
06 using System.Web.UI.WebControls;
07 using System.IO;
08 using iTextSharp.text;
09 using iTextSharp.text.pdf;
10  
11 public partial class _Default : System.Web.UI.Page
12 {
13     protected void Page_Load(object sender, EventArgs e)
14     {
15         //文件初始化
16         Document Doc= new Document();
17  
18         MemoryStream Memory= new MemoryStream();
19  
20         PdfWriter PdfWriter = PdfWriter.GetInstance(Doc, Memory);
21  
22         //字型設定
23         string FontPath = Server.MapPath("kaiu.ttf");
24  
25         BaseFont bfChinese = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
26  
27         Font ChFont = new Font(bfChinese, 9);
28  
29         //文件開啟
30         Doc.Open();
31  
32         //設定表格需要幾攔幾列 (如果不設列,可能會在使用RowSpan或ColSpan發生錯誤)
33         iTextSharp.text.Table Tb = new iTextSharp.text.Table(4,5);
34         //設定表格的Padding
35         Tb.Padding = 4;
36         //自動填滿欄位(如果沒有填滿欄位,不會畫出欄位的線條)      
37         Tb.AutoFillEmptyCells = true;
38  
39         //抬頭
40         Paragraph Title = new Paragraph("iTextSharp畫表格測試", ChFont);
41         //內容水平置中
42         Title.SetAlignment("center");
43  
44         //Cell內容
45         iTextSharp.text.Cell Tc;
46         Tc= new iTextSharp.text.Cell(new Phrase("點部落",ChFont));
47         //內容水平置中
48         Tc.HorizontalAlignment = Element.ALIGN_CENTER;
49         //內容高度置中 (Top,Middle感覺不到有沒有移動)
50         Tc.VerticalAlignment = Element.ALIGN_TOP;
51         Tc.Rowspan = 2;
52         Tc.Colspan = 2;
53          
54         //將Cell加入表格
55         Tb.AddCell(Tc);
56  
57         Tc = new iTextSharp.text.Cell(new Phrase("www.dotblogs.com.tw", ChFont));
58         //內容水平置中
59         Tc.HorizontalAlignment = Element.ALIGN_CENTER;
60         //內容高度置中(Top,Middle感覺不到有沒有移動)
61         Tc.VerticalAlignment = Element.ALIGN_TOP;
62         Tc.Rowspan = 2;
63         Tc.Colspan = 2;
64  
65         Tb.AddCell(Tc);
66        
67         //加入抬頭
68         Doc.Add(Title);
69         //把表格加入文件
70         Doc.Add(Tb);
71  
72         //開啟新的一頁
73         Doc.NewPage();
74  
75         //加入抬頭
76         Doc.Add(Title);
77         //把表格加入文件
78         Doc.Add(Tb);
79  
80         //文件關閉
81         Doc.Close();
82  
83  
84         //檔案下載
85         Response.Clear();
86         Response.AddHeader("Content-Disposition""attachment; filename=pdfExample.pdf");
87         Response.ContentType = "application/octet-stream";
88  
89         Response.OutputStream.Write(Memory.GetBuffer(), 0, Memory.GetBuffer().Length);
90         Response.OutputStream.Flush();
91         Response.OutputStream.Close();
92         Response.Flush();
93         Response.End();
94  
95     }
96 }

[ASP.NET]以iTextSharp手绘表格并产生PDF下载的更多相关文章

  1. 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)

    摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...

  2. JointBoost+CRF+GraphCut做手绘草图的分割

    研究生做的稍微有点水平的就这两个项目了:一个是利用SVM做手绘草图的分类,另一个是利用JointBoost+CRF做手绘草图的分割.总结得出的经验是做研究的方法就是将别人大神的代码看懂然后改成适合自己 ...

  3. Android基于mAppWidget实现手绘地图(一)--简介

    http://lemberg.github.io/mappwidget/user_guide.html 最近在看一些导游类应用,发现一些景区的导览图使用的完全是自定义地图,也就是手绘地图.这种小范围使 ...

  4. EDIUS手绘遮罩功能如何用

    学了这么久的EDIUS视频编辑软件,你们学的怎么样了呢?你们知道EIDUS手绘遮罩的用法么,会熟练地使用它么?如果你们还没有学到这一知识点的话也不要着急,因为你们看完下面这篇文章就会明白了.事不宜迟, ...

  5. 免费下载:320+ 手绘风格 Apple iOS7 图标

    Themify 图标是一套用在网页设计和应用程序的图标,包括 320+ 手工制作的像素完美的苹果  iOS7 图标中汲取灵感.这些图标完全免费,您可以用于任何目的,无论是个人或商业. 您可能感兴趣的相 ...

  6. IOS 手绘地图导航

    手绘地图导航 第三方库 NAMapKit, 1)支持在手绘图上标记.缩放 2)支持在单张图片 3)支持瓦片小图片 思路 前提:美工已经切好手绘图,并告知我们当前的缩放级别. 1)确定好手绘图左上角点在 ...

  7. 基于mAppWidget实现手绘地图(十五)–如何控制放大缩小

    一般来说,可以使用以下几种方式来控制地图的放大/缩小 : 使用控件底部的缩放按钮 双击控件 pinch手势 物理按键 :I键标识缩小 :O键表示放大.(只有设备具有物理按键才行)        当然, ...

  8. [ASP.NET]利用itextsharp将GridView汇出PDF档

    原文 [ASP.NET]利用itextsharp将GridView汇出PDF档 最近在讨论区看到有人说itextsharp可以把网页变成PDF 小弟就去抓一下itextsharp来玩玩,先教大家最实用 ...

  9. 基于mAppWidget实现手绘地图--索引&DEMO

    文章翻译完了,梳理一下,附Demo下载 基于mAppWidget实现手绘地图(一)–简介 基于mAppWidget实现手绘地图(二)–概要 基于mAppWidget实现手绘地图(三)–环境搭建 基于m ...

随机推荐

  1. c 整数的逆序输出 输入3,2就算 2+22+222的结果

    #include<stdio.h> #include<math.h> //整数逆序输出 void nixu() { int num,i; i = ; scanf("% ...

  2. 本地存储sessionStorage 、 localStorage 、cookie整理

    sessionStorage . localStorage .cookie 的区别 sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可 ...

  3. 解决Jedis数据读取乱码问题

    现象 同一套代码,同一个数据源,不同的操作系统,在OSX上数据提取编码正常,而Ubuntu上拉取数据乱码,数据拉取代码如下. @Override public List<String> m ...

  4. Port 8081 already in use, packager is either not running or not running correctly

    运行 react_native 时发生这个错误,解决办法 关掉端口8081对应的进程 1.打开终端,输入命令:lsof -i:8081 2.此时提示: COMMAND   PID    USER   ...

  5. linux driver: input子系统

    <韦东山Linux视频第2期_从零写驱动\第13课第1节 输入子系统概念介绍_P.wmv> 本视频对输入子系统的结构进行了详细的剖析,通过本视频,可以了解到input核心包括了设备和han ...

  6. [C++参考]拷贝构造函数的参数必须是引用类型

    在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识.在effective C++中说过这么一点:拷贝构造函数的参数必须是引用类型的.但是为什么呢? ...

  7. js获取select默认选中的Option (非当前选中值)

    js函数方法: <script> function getDefaultSelectedOption(selectId, valIfNull) { var selectId = selec ...

  8. ioctl函数详细说明

    本函数影响由fd 参数引用的一个打开的文件. #include<unistd.h> int ioctl( int fd, int request, .../* void *arg */ ) ...

  9. boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等

    一.使用同步定时器 这个示例程序通过展示如何在一个定时器执行一个阻塞等待. //makefile #-------------------------------------------------- ...

  10. Java学习之IO之File类一

    File的操作 package com.gh.file; import java.io.File; import java.io.IOException; /** * File操作 * @author ...