使用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, , 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小结的更多相关文章
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- scikit-learn 梯度提升树(GBDT)调参小结
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
随机推荐
- JRebel&XRebel
介绍==>>>> JRebel&XRebel官网 https://zeroturnaround.com/HotSwap和JRebel原理 http://www.holl ...
- 【转】Dom节点操作常用方法
1.访问/获取节点 document.getElementById(id); //返回对拥有指定id的第一个对象进行访问 document.getElementsByName(name); //返回带 ...
- java 用Graphics制作模糊验证码
这篇随笔主要是java中制作验证码的效果,由于是在国庆前做的,现在也找不到原载了.我对自己整理的发表一份 生成的验证码效果如下: 一.建立一个工具类,用来生成验证码 package com.dkt.u ...
- #!/bin/sh & #!/bin/bash区别
在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本.目前研发送测的shell脚本中主要有以下两种方式:(1) #!/bin/sh(2) #!/bin/bash以上两种方式有什么区别? ...
- 1-3 Sass 语法、编译、调试
Sass 语法格式 这里说的 Sass 语法是 Sass 的最初语法格式,他是通过 tab 键控制缩进的一种语法规则,而且这种缩进要求非常严格.另外其不带有任何的分号和大括号.常常把这种格式称为 Sa ...
- ArrayList的使用方法详解(转)
1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和I ...
- mysql游标的用法及作用
1当前有三张表A.B.C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中:常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有2000多条 ...
- BitmapFactory 读取图片方法总结
①decodeFile(java.lang.String pathName) ②decodeResource(android.content.res.Resources res, int id ...
- 实验三:klee的执行重现机制(示例分析)
结论性内容: (1)如果是在程序中使用klee_make_symbolic,则可以使用下列脚本进行重现. export LD_LIBRARY_PATH=/home/klee/xiaojiework/k ...
- C# FTP操作类(获取文件和文件夹列表)
一.如何获取某一目录下的文件和文件夹列表. 由于FtpWebRequest类只提供了WebRequestMethods.Ftp.ListDirectory方式和WebRequestMethods.Ft ...