用到了生成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, , 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, , 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,),new Font(songTiFont,));
loanNumberPara.Alignment = Element.ALIGN_RIGHT;//设置右对齐
document.Add(loanNumberPara);
#endregion
#region 出借人
var investPara=new Paragraph();
investPara.Add(CreateSongtiBoldChunk("出借人"));
investPara.Add(CreateSongtiNomalChunk("(以下简称甲方):"));
investPara.Add(CreateSongtiUnderLineChunk(" 网络名(昵称) "));
document.Add(investPara);
#endregion #region 借款人
var loanerPara = new Paragraph();
loanerPara.Add(CreateSongtiBoldChunk("借款人"));
loanerPara.Add(CreateSongtiNomalChunk("(以下简称乙方):"));
loanerPara.Add(CreateSongtiUnderLineChunk(" "));
loanerPara.Add(CreateSongtiNomalChunk("身份证号:"));
loanerPara.Add(CreateSongtiSpeaceUnderLineChunk());
document.Add(loanerPara);
#endregion #region 通讯地址
var addressPara = new Paragraph();
addressPara.Add(CreateSongtiNomalChunk("通讯地址:"));
addressPara.Add(CreateSongtiSpeaceUnderLineChunk());
addressPara.Add(CreateSongtiNomalChunk("邮编:"));
addressPara.Add(CreateSongtiSpeaceUnderLineChunk());
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, , iTextSharp.text.Font.NORMAL));
return chunk;
}
public Chunk CreateSongtiBoldChunk(string text)
{
Chunk chunk = new Chunk(text, new Font(songTiFont, , iTextSharp.text.Font.BOLD));
return chunk;
} public Chunk CreateSongtiUnderLineChunk(string text)
{
Chunk chunk = new Chunk(text, new Font(songTiFont, , iTextSharp.text.Font.UNDERLINE));
return chunk;
} public Chunk CreateSongtiSpeaceUnderLineChunk(int length)
{
StringBuilder sb=new StringBuilder();
for (int i = ; i < length; i++)
{
sb.Append(" ");
}
return CreateSongtiUnderLineChunk(sb.ToString());
}

使用ITextSharper小结的更多相关文章

  1. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  2. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  3. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  4. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  5. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

  6. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  7. scikit-learn随机森林调参小结

    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...

  8. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  9. scikit-learn 梯度提升树(GBDT)调参小结

    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...

随机推荐

  1. Git版本控制工具(1)

    学习Git的最佳资料网站: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ 这 ...

  2. js中random的应用

    1.生成一个随机数 var r = Math.random(); console.info(r); 结果生成一个0-1的随机数(返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1)) 2.生成 ...

  3. mysql的with rollup

    无意间发现了mysql的with rollup函数(用在group by 函数后面) 测试 1. SELECT NAME,DATE,score FROM stu 结果是 2. SELECT NAME, ...

  4. FFT板子

    woc......FFT这玩意儿真坑...... 一上午除了打了几遍板子什么也没干......真是废了...... 你要加油啊...... #include<cstdio> #includ ...

  5. HTML5学习笔记之canvas

    标签 canvas标签有一个默认宽高:300*150: canvas的宽高一般写到行间样式中,写在style会有问题详细请看这里: 绘制环境 要绘图先要获取到绘制环境: var oC = docume ...

  6. Java中线程的实现

    在Java中要想实现多线程代码有两种方法,一种是继承 Thread 类,另一种就是实现 Runnable 接口 一.继承 Thread 类 Thread 类是在 java.lang 包中定义的,一个类 ...

  7. 转 linux screen 命令详解

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

  8. MARS3.6 Programming

    An Assembly Language I.D.E. To Engage Students Of All Levels * A Tutorial *2007 CCSC: Central Plains ...

  9. php 环境搭配 脚本模式(1)

    php介绍目标1:<?phpecho 'hello world'; //配置好了apacheecho '<br/> 现在时间:" .date(’Y-m-d H:i:s‘)“ ...

  10. Go语言 map遍历

    1 遍历顺序 Go语言里的map,是不保证遍历顺序的(这一点很好理解).甚至同样内容的map,两次遍历的顺序,也可能不一样.下面是一个例子: m := map[string]int{"a1& ...