iText 制作PDF

前言

由于在MVC项目中需要使用PDF,所以自己抽空也来看看itext,以便于丰富自己的知识吧。在此也简单的记录一下,说不定以后可能还用的到。

在此您可以下载你想使用的版本http://sourceforge.net/projects/itextsharp/files/itextsharp/。于是我就下载了现在最新的版本5.4.0。  

下面我就在Asp.Net Mvc 3.0Web项目中创建最简单的Hello PDF了。当然在项目中要首先引用dll文件。itextsharp.dll

第一步创建一个Document实例

?

public Document();

public Document(Rectangle pageSize);

public Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop, float marginBottom);

  当然F12转到定义就可以看到Document有三个构造函数。

  其中第一个Document给size,color,margins都设置了默认值。查看源代码,默认为Document(PageSize.A4, 36, 36, 36, 36);

  第一个构造函数以A4页面作为参数调用第二个构造函数。,第二个构造函数以每边36磅页边距为参数调用第三个构造函数。

  第二个构造函数就可以自定义页面的大小了,例如

?

Rectangle pageSize = new Rectangle(144, 720);

pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE);

Document document = new Document(pageSize);

  通常,你不必创建这样的页面,而可以从下面页面尺寸中选择: A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA 和 FLSE

  可以直接 Document  document =new Document(PageSize.LEGAL);

  大多数情况下使用纵向页面,如果希望使用横向页面,你只须使用rotate()函数: Document document = new Document(PageSize.A4.rotate());

  当创建一个文件时,你还可以定义上、下、左、右页边距: Document document = new Document(PageSize.A5, 36, 72, 108, 180);

说明: 当创建一个矩形或设置边距时,你可能希望知道该用什么度量单位:厘米、英寸或象素,事实上,默认的度量系统以排版单位磅为基础得出其他单位的近似值,如1英寸=72磅,如果你想在A4页面的PDF中创建一个矩形,你需要计算以下数据:

  21 厘米 / 2.54 = 8.2677 英寸

  8.2677英寸* 72 = 595 磅

  29.7 厘米 / 2.54 = 11.6929 英寸

  11.6929英寸* 72 = 842 磅

默认边距为36磅即半英寸。 如果你修改了页面尺寸,仅仅影响到下一页,如果你修改了页边距,则影响到全部,故慎用。

第二步 创建Writer实例

   一旦创建了Document,我们可以创建该文档的多个Writer的实例,所有这些Writer实例均继承自抽象类“iTextSharp.text.DocWriter”。

  同时还有另外一种情况,你可以用iTextSharp.text.pdf.PdfWriter产生文档PDF文件。

  Writer类的构造函数是私有的,你只能通过下面的方法创建一个实例:

  public static PdfWriter getInstance(Document document, Stream os);

  你可以通过下面的方法创建一个实例:

  PdfWriter writer = PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

  但是你几乎永远不会用到Writer实例(除非你想创建高级PDF或者希望用一些非常特殊的函数,如ViewerPreferences 或 Encryption)。所以通过下面的办法得到实例已经足够了: PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

  在第一步中创建一个文档时,第一个参数意义不大,第二个参数可以是任何一种流,到目前为止我们一直使用System.IO.FileStream将Document写入文件中。

第三步 打开Document

   在你写入任何实际数据之前,你可能希望通过以下几种方法写入一些关于本文档的摘要:

   public boolean addTitle(String title);

   public boolean addSubject(String subject);

   public boolean addKeywords(String keywords);

   public boolean addAuthor(String author);

   public boolean addCreator(String creator);

   public boolean addProducer();

   public boolean addCreationDate();

   public boolean addHeader(String name, String content) ;

  你可以选择自己的标题、主题、关键字、作者、创建程序,但以下产品信息将始终被添加:

  iTextSharp (或者iTextSharp的引用)和创建时间(实际上这两种方法是自动调用的)。

  打开document前要做的事: 你只能在Open方法调用之前添加摘要,这是iText开发工具提供的一个选择。 在HTML中,报头信息被放在文档前面报头标识中间,调用Open方法将导致报头信息写入流,因而在Document被打开后无法更改这些数据。

  页面初始化

  Open方法在不同的Witer中同时会产生初始化事件,举例来说,如果你需要一个水印或者页眉页角对象出现在文档第一页的开始处,你需要在打开文档前添加这些,同样的用于设置该文档其他页水印、页眉、页角、页数和尺寸。 当调用下列方法:

  

?

public bool setPageSize(Rectangle pageSize)<br>   public bool Add(Watermark watermark) <br>  public void removeWatermark() <br>   //setting Header property <br>  public void resetHeader() <br>  //setting Footer property <br>  public void resetFooter() <br>  public void resetPageCount() <br>  //setting PageCount property

  产生的结果只能在下一个新页中看到(当在本页调用初始化方法时)

  阅读器参数:

  你可以通过下面的办法为PDF文件指定一些阅读器 (如Adobe Reader) 参数: public void setViewerPreferences(int preferences)

  参数可以使用以下一些常量:

     文件被打开时,页面布局用到下面的其中一个 :

      o PdfWriter.PageLayoutSinglePage – 同时只显示一个页面

      o PdfWriter.PageLayoutOneColumn –单列显示

      o PdfWriter.PageLayoutTwoColumnLeft –双列显示,奇数页在左

      o PdfWriter.PageLayoutTwoColumnRight -双列显示,奇数页在右

        文件打开时,页面模式用到下面其中之一:

      o PdfWriter.PageModeUseNone – 既不显示大钢也不显示缩略图       o PdfWriter.PageModeUseOutlines – 显示大纲

      o PdfWriter.PageModeUseThumbs – 显示缩略图

      o PdfWriter.PageModeFullScreen – 全屏模式,没有菜单、windows控件或者其他任何windows可见控件

     PdfWriter.HideToolbar – 当文档激活时,是否隐藏阅读程序(如Adobe Reader)的工具条

     PdfWriter.HideMenubar -当文档激活时,是否隐藏阅读程序的菜单.

     PdfWriter.HideWindowUI -当文档激活时,是否隐藏阅读程序的界面元素,如滚动条、导航条等,而仅仅保留文档显示

     PdfWriter.FitWindow – 是否调整文档窗口尺寸以适合显示第一页。

      PdfWriter.CenterWindow – 是否将文档窗口放到屏幕中央

    在全屏模式下,指定如何显示界面元素(选择一个)

      o PdfWriter.NonFullScreenPageModeUseNone -既不显示大钢也不显示缩略图

      o PdfWriter.NonFullScreenPageModeUseOutlines – 显示大钢

      o PdfWriter.NonFullScreenPageModeUseThumbs – 显示缩略图 说明:你只能在类PdfWriter中调用这些方法。

    加密

    打开文档之前还要做的一件事情就是加密(如果你希望该文档加密),要达到这个目的,你可以使用下面的方法:

     public void setEncryption(boolean strength, String userPassword, String ownerPassword, int permissions);

      strength 是下面两个常量之一:

        o PdfWriter.STRENGTH40BITS: 40 位

        o PdfWriter.STRENGTH128BITS: 128位 (Acrobat Reader 5.0及以上版本支持)

       UserPassword和ownerPassword 可以为空或零长度, 这种情况下, ownerPassword 将被随机的字符串代替 ? Permissions 为下列常量之一:

        o PdfWriter.AllowPrinting         o PdfWriter.AllowModifyContents

        o PdfWriter.AllowCopy

        o PdfWriter.AllowModifyAnnotations

        o PdfWriter.AllowFillIn

        o PdfWriter.AllowScreenReaders

        o PdfWriter.AllowAssembly

        o PdfWriter.AllowDegradedPrinting

   例如:writer.setEncryption(PdfWriter.STRENGTH128BITS, "userpass", "ownerpass", PdfWriter.AllowCopy | PdfWriter.AllowPrinting);

   打你试图打开示例代码0110产生的文件时,将要求输入密码(‘userpass‘),因为添加了AllowPrinting参数,你可以打印该文档而不会发生任何问题。

第四步 添加内容

doc.Add(new Paragraph("您好, PDF !", font));

  当我们创建了两个writer: writerA 和 writerB:

   PdfWriter writerA = PdfWriter.getInstance(document, new FileStream("Chap0111a.pdf", FileMode.Create));

  PdfWriter writerB = PdfWriter.getInstance(document, new FileStream("Chap0111b.pdf", FileMode.Create));

  我们可以创建两个有细微差别的文档:   writerA.Pause();

   document.add(new Paragraph("This paragraph will only be added to Chap0111b.pdf, not to Chap0111a.pdf"));

  writerA.resume();

  你可以比较文件: Chap0111a.pdf和Chap0111b.pdf的区别

第五步关闭 document

  关闭 document 非常重要, 因为它将关闭正在运行的Writer并将内容写入文件,该方法在最后被调用,你应该总是要关闭文档。

示例代码

?

#region//第一步定义一个Document,并设置页面大小为A4,竖向

Document doc = new Document(PageSize.A4);

#endregion

#region//第二步创建Writer实例

PdfWriter.GetInstance(doc, new FileStream("D:\\Hello.pdf", FileMode.Create));

#endregion

#region 设置PDF的头信息,一些属性设置,在Document.Open 之前完成

doc.AddAuthor("作者aehyok");

doc.AddCreationDate();

doc.AddCreator("创建aehyok");

doc.AddSubject("Asp.Net Mvc 使用 itextsharp 类库创建PDF文件的例子");

doc.AddTitle("此PDF由aehyok创建,嘿嘿");

doc.AddKeywords("Asp.Net Mvc,PDF,iTextSharp,aehyok");

//自定义头

doc.AddHeader("Expires", "0");

#endregion

#region//第三步打开document

doc.Open();

#endregion

#region//载入字体

//"UniGB-UCS2-H" "UniGB-UCS2-V"是简体中文,分别表示横向字 和 // 纵向字 //" STSong-Light"是字体名称

BaseFont baseFT = BaseFont.CreateFont(@"c:\windows\fonts\SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

iTextSharp.text.Font font = new iTextSharp.text.Font(baseFT); //写入一个段落, Paragraph

#endregion

#region///第四步添加内容

doc.Add(new Paragraph("您好, PDF !", font));

#endregion

#region//第五步关闭document

doc.Close();

#endregion

//打开PDF,看效果

Process.Start("D:\\Hello.pdf");

  查看生成的PDF的文档吧

时间: 2024-08-29 21:16:40

iText 制作PDF的相关文章

itext操作pdf文件

itext操作pdf模板: 1.首先使用excel制作好模板文件,将模板文件转换为pdf格式文件. 2.使用Adobe Acrobat XI Pro工具打开pdf文件,在需要的位置添加文本域.(工具-->表单-->编辑) 3.对每个文本域设置文本域属性,为其命名.如title.desion_no等. 4.通过itext方式操作文本域,为期赋值,并重新生成pdf文件. 1 package com.pcm.app.transfer; 2 3 import java.io.ByteArrayOutp

iText导出pdf、word、图片

一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题. 二.iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. iText的

ITEXT操作PDF

ITEXT操作PDF,非常简单: (本方法使用itext1.0.4版本,高版本的itext5.5.0同样兼容,改变一下导入包路径就好了) 1,HELLOWORLD项目 package demo; import java.io.FileOutputStream;     import java.io.IOException;     import com.lowagie.text.Document;     import com.lowagie.text.DocumentException;   

PHP制作pdf文档方法

本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经有年头了.原书的代码中的方法,在查阅手册的时候,很多都已经弃用了,所以分享给大家还是有必要的.php制作pdf文档的方法有很多,我写的只是其中一种,大家有时间可以多看看.好了,进入正题 准备工作: 1.php手册(在线php关于pdf地址: http://php.net/manual/zh/intro.pdf.php ) 2.PD

IText转PDF秒会

 IText转PDF秒会 最近在开发过程中,碰到了这样的需求:将图片及相关文字信息,按视觉标准,排版后直接转成PDF.因为之前没接触过,乍一听很懵,感觉会很难.但经过一番网上搜索学习后,发现其实很简单! (一)Maven引入依赖 注意:一定要按此版本号引入,不然会出现很多错误,包括"中文乱码.中文不输出或直接报错"等异常! <dependency> <groupId>com.itextpdf</groupId> <artifactId>i

itext生成PDF文件报错“Font &#39;STSong-Light&#39; with &#39;UniGB-UCS2-H&#39; is not recognized.”

最近需要写一个抽取表结构的工具,类似于powerdesigner中的表图,其中有一步用到了itext这个第三方jar包来生成pdf文件,碰到了一个问题,记录于此. 问题描述: 工程使用maven构建,pom.xml中对于jar包的定义如下: <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</vers

C#:IText构造PDF文件

IText构造PDF文件 1.1 生成Document Document是我们要生成的PDF文件所有元素的容器,因此要生成一个PDF文档,必须首先定义一个Document对象. Document有三种构造函数:    public Document():    public Document(Rectangle pageSize):    public Document(Rectangle pageSize, float marginLeft,    float marginRight, flo

Java Itext 生成PDF文件

利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URL; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Arr

C# iText split PDF C# 拆分PDF

Nuget安装iText7 using iText.Kernel.Utils; using iText.Kernel.Pdf; using System.IO; public class MyPdfSplitter : PdfSplitter { private readonly string _destFolder; private int _pageNumber; public MyPdfSplitter(PdfDocument pdfDocument, string destFolder)