原文 [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這個檔案加入參考
02 |
using System.Collections.Generic; |
06 |
using System.Web.UI.WebControls; |
08 |
using iTextSharp.text; |
09 |
using iTextSharp.text.pdf; |
11 |
public partial class _Default : System.Web.UI.Page |
13 |
protected void Page_Load(object sender, EventArgs e) |
16 |
Document Doc= new Document(); |
18 |
MemoryStream Memory= new MemoryStream(); |
20 |
PdfWriter PdfWriter = PdfWriter.GetInstance(Doc, Memory); |
23 |
string FontPath = Server.MapPath("kaiu.ttf"); |
25 |
BaseFont bfChinese = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); |
27 |
Font ChFont = new Font(bfChinese, 9); |
32 |
//設定表格需要幾攔幾列 (如果不設列,可能會在使用RowSpan或ColSpan發生錯誤) |
33 |
iTextSharp.text.Table Tb = new iTextSharp.text.Table(4,5); |
36 |
//自動填滿欄位(如果沒有填滿欄位,不會畫出欄位的線條) |
37 |
Tb.AutoFillEmptyCells = true; |
40 |
Paragraph Title = new Paragraph("iTextSharp畫表格測試", ChFont); |
42 |
Title.SetAlignment("center"); |
45 |
iTextSharp.text.Cell Tc; |
46 |
Tc= new iTextSharp.text.Cell(new Phrase("點部落",ChFont)); |
48 |
Tc.HorizontalAlignment = Element.ALIGN_CENTER; |
49 |
//內容高度置中 (Top,Middle感覺不到有沒有移動) |
50 |
Tc.VerticalAlignment = Element.ALIGN_TOP; |
57 |
Tc = new iTextSharp.text.Cell(new Phrase("www.dotblogs.com.tw", ChFont)); |
59 |
Tc.HorizontalAlignment = Element.ALIGN_CENTER; |
60 |
//內容高度置中(Top,Middle感覺不到有沒有移動) |
61 |
Tc.VerticalAlignment = Element.ALIGN_TOP; |
86 |
Response.AddHeader("Content-Disposition", "attachment; filename=pdfExample.pdf"); |
87 |
Response.ContentType = "application/octet-stream"; |
89 |
Response.OutputStream.Write(Memory.GetBuffer(), 0, Memory.GetBuffer().Length); |
90 |
Response.OutputStream.Flush(); |
91 |
Response.OutputStream.Close(); |
- 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)
摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...
- JointBoost+CRF+GraphCut做手绘草图的分割
研究生做的稍微有点水平的就这两个项目了:一个是利用SVM做手绘草图的分类,另一个是利用JointBoost+CRF做手绘草图的分割.总结得出的经验是做研究的方法就是将别人大神的代码看懂然后改成适合自己 ...
- Android基于mAppWidget实现手绘地图(一)--简介
http://lemberg.github.io/mappwidget/user_guide.html 最近在看一些导游类应用,发现一些景区的导览图使用的完全是自定义地图,也就是手绘地图.这种小范围使 ...
- EDIUS手绘遮罩功能如何用
学了这么久的EDIUS视频编辑软件,你们学的怎么样了呢?你们知道EIDUS手绘遮罩的用法么,会熟练地使用它么?如果你们还没有学到这一知识点的话也不要着急,因为你们看完下面这篇文章就会明白了.事不宜迟, ...
- 免费下载:320+ 手绘风格 Apple iOS7 图标
Themify 图标是一套用在网页设计和应用程序的图标,包括 320+ 手工制作的像素完美的苹果 iOS7 图标中汲取灵感.这些图标完全免费,您可以用于任何目的,无论是个人或商业. 您可能感兴趣的相 ...
- IOS 手绘地图导航
手绘地图导航 第三方库 NAMapKit, 1)支持在手绘图上标记.缩放 2)支持在单张图片 3)支持瓦片小图片 思路 前提:美工已经切好手绘图,并告知我们当前的缩放级别. 1)确定好手绘图左上角点在 ...
- 基于mAppWidget实现手绘地图(十五)–如何控制放大缩小
一般来说,可以使用以下几种方式来控制地图的放大/缩小 : 使用控件底部的缩放按钮 双击控件 pinch手势 物理按键 :I键标识缩小 :O键表示放大.(只有设备具有物理按键才行) 当然, ...
- [ASP.NET]利用itextsharp将GridView汇出PDF档
原文 [ASP.NET]利用itextsharp将GridView汇出PDF档 最近在讨论区看到有人说itextsharp可以把网页变成PDF 小弟就去抓一下itextsharp来玩玩,先教大家最实用 ...
- 基于mAppWidget实现手绘地图--索引&DEMO
文章翻译完了,梳理一下,附Demo下载 基于mAppWidget实现手绘地图(一)–简介 基于mAppWidget实现手绘地图(二)–概要 基于mAppWidget实现手绘地图(三)–环境搭建 基于m ...
随机推荐
- Request url 各种属性值
網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc Request.ApplicationPath / Request.Phys ...
- 使用AJAX日历控件,显示某些日期(CalendarExtender)
1. The HTML Markup <div> <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1&q ...
- CSS: inline-block的应用和float块高度塌陷
普通流高度塌陷: 当块float浮动时,不会对块布局产生影响,块仍然会按照左右或者上下的顺序排列.但是会影响文档的排列,当文档的高度超过块的高度时,块的高度会产生塌陷现象. 高度塌陷解决方法: ...
- LeetCode 二叉树的最小深度
计算二叉树的最小深度.最小深度定义为从root到叶子节点的最小路径. public class Solution { public int run(TreeNode root) { if(root = ...
- 一个简单链表的C++实现(二)
/* LList.cpp * Author: Qiang Xiao * Time: 2015-07-12 */ #include<iostream> using namespace std ...
- mbed 初试(LinkNode 板卡)(2016-04-21)
前言 感谢论坛,感谢 LinkSrite,论坛活动申请了一个 LinkNode,体验了一下 mbed. 翻看完官方 wiki,大概了解了一下 mbed 的开发,然后做了 blink 和 pwm 的测试 ...
- 新建linux组、用户命令
之前在安装oracle的时候,出现了一个问题:安装Oracle,新建组.用户的时候的一个错误.看这篇博客前,先看这个链接,学习要从解决出现的问题出手. 建立用户组和用户 下面总结一下Linux建立组和 ...
- jquery 动态增加的html元素,初始化设置在id或class上的事件无效
一般情况,我们会在页面初始化完成后对class定义一些全局事件,举个栗子: $(document).ready(function(){ $(".class").on("m ...
- css基本框架
- Objective-c 截取子字符串
NSString类中提供了这样三个方法用于获取子字符串: – substringFromIndex: – substringWithRange: – substringToIndex: 它们该怎么使用 ...