使用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 ...
随机推荐
- 微服务-分布式日志系统Logstash部署
参考资料: 1 .Logstash中文官网 2. 阿里云Elasticsearch> 最佳实践 > logstash部署 3. logstash.elasticsearch.kibana搭 ...
- html+css 布局篇
float 做了float后有一些不好的影响. 1.背景不能显示 由于浮动产生,如果对父级设置了(CSS background背景)CSS背景颜色或CSS背景图片,而父级不能被撑开,所以导致CSS背景 ...
- webservice使用windows身份验证,ajax请求报错401未授权的解决办法
$.ajax({ type: "GET", url: service_url, dataType: "xml", data: "ParamId=&qu ...
- [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位
无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...
- python的异常处理和模块发布安装
1.完整的异常处理 异常处理能够保证程序出错是也能够完整运行,不会应为bug而停止运行,这里介绍下获取异常的完整格式 try: num = int(input("输入整数:")) ...
- apache2 tomat https 变成http的解决方案
1.apache2 设置 RequestHeader set X-Forwarded-Proto "https" 2.springboot 设置 server.tomcat.p ...
- 针对通过 SSH 连接到 Azure Linux VM 时发生的失败、错误或被拒绝问题进行故障排除
尝试连接到 Linux 虚拟机 (VM) 时,有多种原因可能会导致安全外壳 (SSH) 错误.SSH 连接失败或被拒绝. 本文帮助用户找出原因并更正问题. 可以使用 Azure 门户.Azure CL ...
- Microsoft SQL Server 数据量大 导入导出 问题汇总
问题一: 今天拿到一份有近百万条数据的Excel要导到数据库里面,我先在本地(2014)用自带Excel,然后生成脚本文件去服务器(2008)上执行:文件SQL打开不了. 解决方法: 用自带的sqlc ...
- 在win7 windows 上编译 beego 上传到 linux 去执行
在beego的项目目录下,执行: GOOS=linux GOARCH=amd64 go build So easy!但是却搞了好久! 参考连接:http://blog.csdn.net/changji ...
- Stage划分和Task最佳位置算法源码彻底解密
本课主题 Job Stage 划分算法解密 Task 最佳位置算法实现解密 引言 作业调度的划分算法以及 Task 的最佳计算位置的算法,因为 Stage 的划分是DAGScheduler 工作的核心 ...