【译】在ASP.NET中创建PDF-iTextSharp起步
.Net framework 中自身并不包含可以和pdf打交道的方法。所以,当你需要你的ASP.Net Web应用程序中包含创建或与PDF文件交互的部分时,就不得不去找可用的第三方组件.使用谷歌可以搜索到在你预算之内的收费组件,当然同时也有一些开源组件。其中之一就是iTextSharp,这个程序是著名的JAVA工具iText的.Net版本.
但是iTextSharp最大问题是缺少文档.虽然官网上有一些起步教程,但大多数程序员还是选择去看JAVA版本的文档-也就是iText的文档.或者是去买市面上唯一一本关于这方面的书iText in Action.然而,这本书是针对Java版本的iText的书.iText in Action中大多数代码仅仅需要少量修改就可以在.Net下使用,但如果你的C#水平还是相对比较菜时,Java和.Net两个版本之间类库命名的差别和.Net版本下缺少文档,往往会让你抓狂。最终无奈之下,你只能用Reflector来查看某些方法到底是干什么用的.所以,作为”How to”系列文章,本文将讲述如何开始使用C#版的iTextSharp.
第一件事是在这里下载iTextSharp,下载完成后解压zip文件得到itextsharp.dll文件,在Visual Studio或Web Developer中创建一个新的网站,通过添加Asp.net文件夹选项添加bin目录,在bin目录下右键选择添加引用选项,在浏览选项卡中,选择itextsharp.dll:
然后点击OK,这个dll随后会被加到bin目录下,现在你可以在你的网站或项目中使用iTextSharp了.
我还添加了一个用于存放生成的PDF的文件夹命名为PDFs.,为了避免每次使用iTextSharp类时都使用完全路径,我还添加了几个using语句:
using iTextSharp.text;using iTextSharp.text.pdf;
另外,你还需要引用System.IO命名控件,因为你需要创建,打开和关闭文件,这个命名空间中的一些Class也必不可少.
iTextSharp的核心对象是Document对象,你需要通过Document对象的实例来操作内存中的pdf文件,所以首先需要实例化一个Document对象:
var doc1 = new Document();
上述代码在在内存中使用默认设置来实例化一个Document对象,默认的文档大小是A4(也就是210毫米x297毫米,或是8.26英尺x11.69英尺),页边距默认都是半英尺.下一步要做的就是将内存中的Document对象保存到硬盘中,使用iTextSharp.text.pdf.PdfWriter类来实现这个功能:
//use a variable to let my code fit across the page...string path = Server.MapPath("PDFs");PdfWriter.GetInstance(doc1, new FileStream(path + "/Doc1.pdf", FileMode.Create));
现在就可以对文档进行操作了,首先打开文档,往里写一段内容,最后关闭文档:
doc1.Open();doc1.Add(new Paragraph("My first PDF"));doc1.Close();
就是这么简单,下面刷新PDFS文件夹,你就会发现一个新的文件-Doc1.pdf,打开这个文件,刚才添加的段落已经成功显示.
很多时候,你并不希望通过默认设置创建默认大小,默认边距的PDF文档,所以iTextSharp允许你自定义这些设置,所以Document对象还提供了其他两个构造函数:
public Document(iTextSharp.text.Rectangle pageSize);public Document(iTextSharp.text.Rectangle pageSize, float, float, float, float);
第一个构造函数可以这样使用:
var doc = new Document(PageSize.A5);
PageSize类包含了一系列Rectangle对象代表了大多数纸张的大小,从A0到A10,B0到B10,legal,分类账,信封,明信片,剪报等,如果PageSize类内的纸张大小无法满足你的需求,你可以自定义一个Rectangle对象,对其设置值后作为参数传给Document构造函数:
var doc = new Document(new Rectangle(100f, 300f));PdfWriter.GetInstance(doc, new FileStream(path + "/Doc2.pdf", FileMode.Create));doc.Open();doc.Add(new Paragraph("This is a custom size"));doc.Close();
上面代码中,创建的PDF文档为100像素宽,300像素长,因为是72像素/英尺,所以这个文档并不大,实际上为1.39 英尺 x 4.17 英尺().
第二个构造函数以Rectangle和四个float类型的数字作为参数允许你通过float类型的变量自定义页边距,同样,单位是像素,默认半英尺的像素为36像素.
如果你使用PageSize类的构造函数,或者是自定义Rectangle,你还可以为文档设置背景色,这个设置可以通过RGB颜色值,或是CMYK值。如果你生成的PDF文档将会在专业的平板印刷机中印刷,你必须通过CMYK来设置.但对于大多数数码打印机来说,使用RGB更容易被接受,当然,如果你的PDF用于WEB,则优先使用RGB,设置文档的背景色,通过Rectangle对象的BackgroundColorproperty进行设置:
r.BackgroundColor = new CMYKColor(25, 90, 25, 0);r.BackgroundColor = new Color(191, 64, 124);
上面两行代码都会将文档的背景色设置为迷人的粉红色…
本文简单介绍了iTextSharp,也是你学习iTextSharp的入口,后续文章将会详细介绍这个敏捷的组件的一系列功能.
原文地址:http://www.mikesdotnetting.com/Article/80/Create-PDFs-in-ASP.NET-getting-started-with-iTextSharp
Translated by CareySon
---------------
写在后面:翻译这篇文章是因为项目中最近需要用到操作PDF,可是.Net下这个组件文档相对比较少,即使有一些资料,也不系统,所以我找到了这个系列的文章,在翻译的过程中,也是对我自己的学习和提高.后续文章翻译中….
【译】在ASP.NET中创建PDF-iTextSharp起步相关推荐
- 【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本
本篇文章是讲述使用iTextSharp这个开源组件的系列文章的第三篇,iTextSharp可以通过Asp.Net创建PDFs,就像HTML和ASP.Net为文本提供了多种容器一样,iTextSharp ...
- ABBYY在MS Office中创建PDF文件的方法
2019独角兽企业重金招聘Python工程师标准>>> ABBYY PDF Transformer+是一款可创建.编辑及将PDF文件转换为其他可编辑格式的OCR图文识别软件,不仅可以 ...
- 在ASP.NET中创建自定义控件初步(转)
假如你有大量的asp.net页面,在其中你会要求访问者选择一个邮政编码.然后,基于这个邮编,显示与之相关的城市和省份.这项功能可以通过一个包含邮政编码的dropdownlist控件来组织,或者可以通过 ...
- Unity中创建PDF的方法
前言 最近项目有需求要实现unity内生成学习记录的pdf,遇到不少问题,后面换了种简单的手段实现 1.ITextSharp实现 关于ITextSharp我就不多介绍了,使用起来很方便,但是在unit ...
- asp.net中创建一个简单的自定义控件
//程序名称:Class1.cs //程序功能:创建自定义控件 using System; using System.Collections.Generic; using System.Text; u ...
- C# 创建PDF文档
下面的示例将介绍如何在C#中创建PDF文档, 工具/原料 Free Spire.PDF for .NET VS2013(版本可自选) 方法/步骤 下载安装该类库(安装完成后,注意在项目中引用Spire ...
- Java使用 PDFBox创建 PDF 文件并将文本写入其中
在本 PDFBox 教程中,我们将了解如何使用 PDFBox 2.0 创建 PDF 文件并将文本写入其中.我们将在此过程中逐步了解. 以下是使用 PDFBox 2.0 创建文本并将其写入 PDF 文件 ...
- 【半译】在ASP.NET Core中创建内部使用作用域服务的Quartz.NET宿主服务
在我的上一篇文章<在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度>,我展示了如何使用ASP.NET Core创建Quartz.NET托管服务并使用它来按计 ...
- 在ASP.NET Core中创建自定义端点可视化图
在上篇文章中,我为构建自定义端点可视化图奠定了基础,正如我在第一篇文章中展示的那样.该图显示了端点路由的不同部分:文字值,参数,动词约束和产生结果的端点: 在本文中,我将展示如何通过创建一个自定义的D ...
最新文章
- 冒泡 MS Azure 不便宜。。。
- 亿级流量电商系统JVM性能调优实战
- Rails 新浪微博的登录认证
- A-Frame.js 学习文档翻译(一)实体
- C#——LINQ技术DEMO
- VTK:PolyData之RuledSurfaceFilter
- NOIP2005普及组第3题 采药 (背包问题)
- 神奇又好玩的谢尔宾斯基雪花!
- 阅读react-redux源码(三) - mapStateToPropsFactories、mapDispatchToPropsFactories和mergePropsFactories
- MySQL主键自增长报duplicate_MySQL使用on duplicate key update引起主键不连续自增
- Python Tree库绘制多叉树的用法介绍
- ZK Framework(一、HelloWorld)
- UINavigationController_学习笔记
- C#制作不规则窗体的简单方法
- 【保证能用】Ubuntu创建一个正常权限的用户
- 计算机与电气工程sci期刊,2019年电气工程领域的英文SCI期刊(影响因子+近年来期刊发表数量)...
- gamemaker学习笔记:截屏
- input file本地图片预览的方法(兼容IE、Chrome和Firefox)
- 【iOS遇到的问题】switch控件--在设置switch按钮状态为on或者off,运行app,模拟器黑屏
- CToolBar的使用总结1
热门文章
- java 技术 管理_java技术转型产品或者项目管理,请大神指导?
- mongoTemplate 条件查询
- mysql索引详细介绍简书_MySql索引详解
- 升级mysql服务器二进制备份_MySQL二进制日志备份和恢复详解
- vscode jsx html补全,VScode设置jsx语法自动补全
- Redis 16 个常见使用场景
- maven多项目打包报错---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到 package xxx does not exist
- GIT:如何管理本机的多个ssh密钥(多个远程仓库账号)
- Python的零基础超详细讲解(第一天)-Python简介以及下载
- mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解