用到了生成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. sqoop简单介绍

    一简介 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS ...

  2. (MVVM) ListBox Binding 和 实时刷新

    当需要用Lisbbox 来log 一些记录的时候,ObservableCollection 并不可以是记录实时的反应在WPF 的UI上面. 这个时候就需要用一个异步collection 来完成. // ...

  3. maven项目怎么引入另一个maven项目

    yi      最近在做项目的时候,遇到多模块(mudul)开发,里面的maven包相互引用,刚开始不知道怎么导入,费了好大尽总算搞定了.把遇到的问题记录下. 1.怎么导入依赖的maven模块 选择I ...

  4. QML Delegate中访问该持有者的方式 附加属性(转载)

    http://blog.csdn.net/yuxiaohen/article/details/17226971   用法很奇葩记录一下,实测可以,用于弱化delegate与持有者的依赖 delegat ...

  5. mongoDb 命令

    1.显示MongoDB的服务器统计:db.stats() 2.创建数据库:use dbname 3.删除数据库:db.dropDatabase() 4.检查当前选择的数据库:db 5.检查数据库列表: ...

  6. win10下Java环境配置

    JAVA_HOME : E:\ensoft\jdk(这个是jdk安装路径) CLASSPATH : .;E:\ensoft\jdk\lib;E:\ensoft\jdk\lib\dt.jar;E:\en ...

  7. tq2440 jlink连接问题

    由于工作转向做嵌入式linux平台上的手台通信协议开发,所以想系统的学习一下嵌入式linux的开发流程. 向同事借了tq2440的板子来玩,一边看书,一边做实验,看的书是<嵌入式linux基础教 ...

  8. slf4j-api-1.5.8.jar

    资源介绍: 详细说明:slf4j-api-1.5.8.jar,jsp开发中使用FCK编辑器,要用到一个jar包-slf4j-api-1.5.8.jar, jsp development using t ...

  9. Intellij IDEA快速补全System.out.print : sout

  10. Intellij IDEA 代码提示忽略大小写

    1.0 File >>Settings 2.0 Editor >> General >> Code Completion 如下图 选择 None