使用ITextSharper小结

  用到了生成PDF版的合同,上网研究了一圈,发现不需要服务器端安装插件的,比较好用的就是这个ITextSharper了,于是便开始了研究。

1.解决汉字不显示的问题,指定一下字体,默认的字体好像不支持中文,C:\Windows\Fonts\simsun.ttc,这是字体的路径。

BaseFont songTiFont = BaseFont.CreateFont(@"C:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//宋体
        BaseFont heiTiFont = BaseFont.CreateFont(@"C:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//黑体
var titlePara = new iTextSharp.text.Paragraph("借 款 合 同", new Font(heiTiFont, 22, iTextSharp.text.Font.BOLD));

2.PDF中基本的概念:

从大到小:Document文档>Paragraph段落>Phrase短句>Chunk块

这个概念跟HTML差不多,Document=<Html>,Paragraph=<P> ,Phrases=<div>,Chunk=<Span>,

Phrase这个我可能理解的不太到位,大家参考就好了,音译过来是短句的意思,是一系列以特定间距(两行之间的距离)作为参数的块,一个短句有一个主字体,但短句中的一些块具有不同于主字体的字体,你有更多的选择去创建短句(网上抄的)。
这个博文讲的比较好,值得参考:http://www.cnblogs.com/LifelongLearning/archive/2011/03/30/2000072.html

3.设置

我用下划线后发现两行之间距离有点近了,研究了半天,发现在创建Paragraph的时候去指定一下就好了。

var loanerPara = new Paragraph(25);

需要左对齐或者右对齐的时候,使用下面的这句

titlePara.Alignment = Element.ALIGN_CENTER;

4.基本写法

懒得去分解了,贴了一部分代码上来。基本思路是,创建Document->指定大小(如A4)->创建实例->打开文档->创建段落(中文一定要指定字体)->创建块->把块加到段落中->把段落加到文档中 。

  private void button1_Click(object sender, EventArgs e)
        {
            string fileName = string.Empty;
            SaveFileDialog dlg =new  SaveFileDialog();
            dlg.FileName = "借款合同";
            dlg.DefaultExt = ".pdf";
            dlg.Filter = "Text documents (.pdf)|*.pdf";
            var result = dlg.ShowDialog();
            if (result ==DialogResult.OK)
            {
                fileName = dlg.FileName;
                Document document = new Document(PageSize.A4);//从大到小:Document文档>Paragraph段落>Chunk块

                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));
                document.Open();
               // BaseFont songTiFont = BaseFont.CreateFont(@"H:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//宋体
                //BaseFont heiTiFont = BaseFont.CreateFont(@"H:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//黑体
                #region 生成标题
                var titlePara = new iTextSharp.text.Paragraph("借 款 合 同", new Font(heiTiFont, 22, iTextSharp.text.Font.BOLD));
                titlePara.Alignment = Element.ALIGN_CENTER;
                document.Add(titlePara);
                #endregion
                #region 借款号
                var loanNumberPara = new Paragraph(string.Format("{0}借字第{1}号",DateTime.Now.Year,00001),new Font(songTiFont,12));
                loanNumberPara.Alignment = Element.ALIGN_RIGHT;//设置右对齐
                document.Add(loanNumberPara);
                #endregion
                #region 出借人
                var investPara=new Paragraph(25);
                investPara.Add(CreateSongtiBoldChunk("出借人"));
                investPara.Add(CreateSongtiNomalChunk("(以下简称甲方):"));
                investPara.Add(CreateSongtiUnderLineChunk("  网络名(昵称) "));
                document.Add(investPara);
                #endregion

                #region 借款人
                var loanerPara = new Paragraph(25);
                loanerPara.Add(CreateSongtiBoldChunk("借款人"));
                loanerPara.Add(CreateSongtiNomalChunk("(以下简称乙方):"));
                loanerPara.Add(CreateSongtiUnderLineChunk("            "));
                loanerPara.Add(CreateSongtiNomalChunk("身份证号:"));
                loanerPara.Add(CreateSongtiSpeaceUnderLineChunk(20));
                document.Add(loanerPara);
                #endregion

                #region 通讯地址
                var addressPara = new Paragraph(25);
                addressPara.Add(CreateSongtiNomalChunk("通讯地址:"));
                addressPara.Add(CreateSongtiSpeaceUnderLineChunk(40));
                addressPara.Add(CreateSongtiNomalChunk("邮编:"));
                addressPara.Add(CreateSongtiSpeaceUnderLineChunk(10));
                document.Add(addressPara);
                #endregion

               #region 电话邮箱
                document.Close();
            }
        }

        BaseFont songTiFont = BaseFont.CreateFont(@"H:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//宋体
        BaseFont heiTiFont = BaseFont.CreateFont(@"H:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//黑体
        public Chunk CreateSongtiNomalChunk(string text)
        {
            Chunk chunk = new Chunk(text, new Font(songTiFont, 15, iTextSharp.text.Font.NORMAL));
            return chunk;
        }
        public Chunk CreateSongtiBoldChunk(string text)
        {
            Chunk chunk = new Chunk(text, new Font(songTiFont, 15, iTextSharp.text.Font.BOLD));
            return chunk;
        }

        public Chunk CreateSongtiUnderLineChunk(string text)
        {
            Chunk chunk = new Chunk(text, new Font(songTiFont, 15, iTextSharp.text.Font.UNDERLINE));
            return chunk;
        }

        public Chunk CreateSongtiSpeaceUnderLineChunk(int length)
        {
            StringBuilder sb=new StringBuilder();
            for (int i = 0; i < length; i++)
            {
                sb.Append(" ");
            }
           return  CreateSongtiUnderLineChunk(sb.ToString());
        }
时间: 2024-12-28 02:53:07

使用ITextSharper小结的相关文章

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

【转载】小结一下linux 2.6内核的四种IO调度算法

在LINUX 2.6中,有四种关于IO的调度算法,下面综合小结一下: 1) NOOP NOOP算法的全写为No Operation.该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作.之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求.NOOP假定I/O请求由驱动程序或者设备做了优化或者重排了顺序(就像一个智能控制器完成的工作那样).在有些SAN环境下,这个选择可能是最好选择.Noop 对于 IO

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert

安卓小结《1》

Activity的生命周期和启动模式的知识点小结: 1.如果Activity切换的时候,新Activity是透明,旧的不会走onStop方法. 2.新的Activity切换的时候,旧Activity  会先执行,onpause,然后才会启动新的activity. 3. Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时 候,onRestoreInstanceState方法会被回调,时序在onSt

date命令小结

在写linux shell脚本时,date是经常要用到的一个命令,这篇文章就此做个小结,以防自己用到时到处找 1.最基本的,显示当前的具体时期:直接敲入 date即可,如下, [email protected]:~/scripts$ date 2015年 01月 03日 星期六 21:46:49 CST 2.显示某个文件上次修改的时间:date -r file [email protected]:~/scripts$ date -r save.sh 2015年 01月 02日 星期五 23:29

java 小结2 多态问题。

面向对象这个东西,其实我们一直是不是都没有感觉到自己在用,以后我一定要用用.以前学c#时候认真的看过一次,最近一直研究java.随便再看看. 多态问题: 在java中多态分为(1)编译时多态和(2)运行时多态 (1)编译时多态比较容易理解:其实就是通过方法重载,就是方法的重载,同一个函数名但是可以参数不一样.这就是重载(so easy) (2)运行时多态:这个是通过方法覆盖实现的,就是子类在继承父类的时候,通过对某个方法的重写,覆盖父类方法. 简单的说:比如我们有个父类A,子类B通过Extend

php操作xml小结

<?php #php操作xml,SimpleXMLElement类小结 header('Content-type:text/html;charset=utf-8;'); //1.构造函数 /* $xmlstring=<<<XML <?xml version="1.0" encoding="utf-8"?> <note  xmlns:b="http://www.w3school.com.cn/example/&quo

网络安全解决之个人小结

方案分为安全技术部分和安全管理部分. 安全技术部分: 1.物理安全 需要建设独立的计算机机房,满足防水.防火.防静电等要求.机房设置门禁和视频监控. 2.网络安全 采用防火墙进行安全区域分割,把公司网络分为服务器区和办公区.设置不同的安全规则以防范黑客攻击.采用上网行为管理产品对网络行为和流量进行管控. 3.系统安全 采用终端安全管理系统,对客户端进行管控,重点管控网络行为.补丁升级和软件分发等.对服务器进行安全加固,保障服务器安全. 4.应用安全 对Web电子商务服务器进行漏洞扫描和加固,防范