itextsharp利用模板生成pdf文件笔记
iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件。
中文参考网站:http://hardrock.cnblogs.com/
英文参考网站:http://itext.ugent.be/library/
· 技术文章(http://itext.ugent.be/articles/)
· 在线示例 (http://itextdocs.lowagie.com/tutorial/)
· 英文API(http://itext.ugent.be/library/api/)
<<iText in Action 2nd>>读书笔记汇总http://www.cnblogs.com/chinafine/archive/2008/07/08/1238010.html
一. 生成pdf 的关键代码
1. 首先初始化个流和获取到的model数据

2、利用adobe acrobat pro编辑pdf模板

如上图所示,如“案由”这类文本,编辑字段与代码的model 一致即可,在输出的时候回自动匹配数据,具体实现后面具体说明。
如案件基本情况的这种表,需要连接输入,就不能直接输出来做,此时需要用定位坐标的方式来实现。在此之前需要我们设置几个参数变量以及静态数据,方便以后的修改


2. 生成主页的pdf


图中340,咱们需要用850-340=510(因为itext与Adobe Acorbat Pro Y坐标方向相反,需要转换下,850为全页的高度)
截取字符串的问题,需要注意一下,全部长度-“请见续页”长度,加上“请见续页”这几个字才算完成。()
3. 生成续页的pdf
首先获取到续页的字符串


续页套打的原理同首页。
4、文字删除线、下划线样式等
public void Print<TModel>(Stream output, TModel model) where TModel : PdfBaseModel
{
base.Print(output);
if (PrintBaseFont != null)
{
PStamper.AcroFields.AddSubstitutionFont(PrintBaseFont);
}
PdfPrinterUtility.FillFormByModel(PStamper, model, PrintBaseFont);
Phrase phrase = new Phrase();
phrase.Font = PrintCurrentFont;//return new Font(PrintBaseFont, 11, Font.NORMAL);
phrase.Add(new Chunk("公开11,"));//继承短句的字体
//采用fontfactory方法,结果不支持中文。只显示出来22.
phrase.Add(new Chunk("不公开22", FontFactory.GetFont(FontFactory.HELVETICA, , Font.STRIKETHRU)));
////采用字体文件来生成字体,支持中文
phrase.Add(new Chunk("不公开33", new Font(PrintBaseFont, , Font.STRIKETHRU)));
ColumnText column = new ColumnText(Canvas);
column.SetSimpleColumn(, , , , , Element.ALIGN_LEFT);
column.AddText(phrase);
column.Go();
PStamper.FormFlattening = true;
PStamper.Writer.CloseStream = false;
PStamper.Close();
}
public static class PrintCultureInfo
{
private static readonly string FontsBaseFolder =
System.Web.HttpContext.Current.Server.MapPath("~/Fonts/"); private static readonly string ChineseBaseFontName = "simsun.ttc,1"; public const string Chinese = "zh-CN"; public static BaseFont CreateChineseFont()
{
var basefontPath = Path.Combine(FontsBaseFolder, ChineseBaseFontName);
BaseFont baseFT = BaseFont.CreateFont(basefontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
return baseFT;
} }

5、在利用模板生成当前pdf后,需要附加其他pdf文件内容
public byte[] AppendExistPdf(byte[] currentPdfBytes, List<string> pdfPathsToAppend)
{
using (MemoryStream appendedStream = new MemoryStream())
{
var appendedDocument = new Document();
var appendedPdfWriter = PdfWriter.GetInstance(appendedDocument, appendedStream);
appendedDocument.Open();
var appendedPdfContentByte = appendedPdfWriter.DirectContentUnder;
appendedDocument.NewPage();
var reader = new PdfReader(currentPdfBytes);
for (int i = ; i <= reader.NumberOfPages; i++)
{
var page = appendedPdfWriter.GetImportedPage(reader, i);
appendedDocument.NewPage();
appendedPdfContentByte.AddTemplate(page, , );
}
foreach (var existPdfPath in pdfPathsToAppend)
{
reader = new PdfReader(existPdfPath);
for (int i = ; i <= reader.NumberOfPages; i++)
{
var page = appendedPdfWriter.GetImportedPage(reader, i);
appendedDocument.NewPage();
appendedPdfContentByte.AddTemplate(page, , );
}
}
appendedDocument.Close();
appendedPdfWriter.Close();
return appendedStream.ToArray();
}
}
二. Adobe Acorbat Pro的使用说明。
用这个软件来编辑pdf模板
1、 测量坐标
(1) 编辑——首选项——单位和参考线——将单位设置成点,与itext单位一致
(2) 视图——隐藏和显示——光标坐标
2、 创建表单(类似于网页中的form)
(1) 工具——表单——创建表单

(2)添加域——文本域——域命名——属性(设置字体,是否多行显示,字体大小,是否自动大小),注意字体要选Helvetica(itext只支持4种字体,其他的不会显示)


(2) 添加完成后保存表单。
3、编辑pdf模板中的文本

4、编写简单的column,规则矩形
ColumnText commentColumn = new ColumnText(getCanvas());
// commentColumn.setSimpleColumn(480, yllIndex, 515, yurIndex, 15, Element.ALIGN_LEFT);
// commentColumn.addText(commentPhrase);
// commentColumn.go();
5、复杂的column,不规则多边形
Phrase proofsPhrase = new Phrase();
proofsPhrase.setFont(getPrintCurrentFont());
proofsPhrase.add(new Chunk(showStr));
float[] left = {, , , , , , , };
float[] right = {, , , };
ColumnText column = new ColumnText(canvas);
column.setLeading(, );
column.setColumns(left, right);
column.addText(proofsPhrase);
column.go();
三、需要注意的坑
1、应用columnText时需要填写的内容不能为空字符串,否则报错

itextsharp利用模板生成pdf文件笔记的更多相关文章
- 根据PDF模板生成PDF文件(基于iTextSharp)
根据PDF模板生成PDF文件,这里主要借助iTextSharp工具来完成.场景是这样的,假如要做一个电子协议,用过通过在线填写表单数据,然后系统根据用户填写的数据,生成电子档的协议.原理很简单,但是每 ...
- Java利用模板生成pdf并导出
1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...
- 使用word模板生成pdf文件
使用word模板生成pdf文件 源码:UserWord
- Android根据pdf模板生成pdf文件
我们需要生成一些固定格式的pdf文件或者一些报表数据,那么我们可以用 iText包去做. 需要包含的jar包:iText-5.0.6.jar iTextAsian.jar ,怎样jar包导入工程 ...
- NET二进制图片存储与读取的常见方法,iTextSharp添加图片生成PDF文件
public void iTextSharpCreatPDF() { string pdfpath = System.Web.HttpContext.Current.Server.MapPath(&q ...
- java根据模板生成pdf
原文链接:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支 ...
- Itext生成pdf文件
来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...
- 利用html模板生成Word文件(服务器端不需要安装Word)
利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...
- JavaWeb项目生成PDF文件添加水印图片并导出
一.前言 首先需要在Maven中添加相应的jar包依赖,若项目没用到Maven,也可自行下载相应所需的jar包(itextpdf.jar 与 itext-asian.jar),如下图所示.点此下载 M ...
随机推荐
- PHP之流程控制
nest 嵌套 the curly braces 花括号 colon syntax 冒号语法 PHP三种if判断的写法 写法一: if(true){ }else if(){ }else if(){ } ...
- [about remote controller]--mstsc-teamviewer-vnc,nomachine
https://www.jianshu.com/p/c80db368ed8a https://www.nomachine.com/download Ubuntu安装VNC,VNC却无法随系统启动,遂换 ...
- CSDN论坛 > Delphi > VCL组件开发及应用 DBLookupComboBox用法
(1)DataSource属性 该属性用于连接要编辑数据的主表数据源(2)DataField属性 该属性用于指定要编辑的数据字段名(3)ListSource属性 . 该属性用于 ...
- Django 之Redis配置
目的:访问服务器频繁的读取数据库 ,会耗损服务器性能及降低用户体验,为此引入Redis 1,安装 redis(2.10.6兼容性更好) pip install redis 2,settings.py配 ...
- 【Python全栈-HTML】HTML入门
HTML入门介绍 参考: https://www.bilibili.com/video/av21663728/?p=339 http://www.cnblogs.com/yuanchenqi/arti ...
- 集齐所有机制的按键控制LED驱动
内核版本:linux2.6.22.6 硬件平台:JZ2440 驱动源码 final_key.c : #include <linux/module.h> #include <linux ...
- SpringBoot-@async异步执行方法
启动加上@EnableAsync ,需要执行异步方法上加入 @Async 在方法上加上@Async之后 底层使用多线程技术 演示代码: @RestController @Slf4j public c ...
- 前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
表单控件分类 input标签: input标签 type属性的text,password,button按钮,submit按钮 input标签placeholder属性 标签上显示内容 input标签 ...
- 并发编程---互斥锁---互斥锁与join的区别
互斥锁 互斥锁:就是把多个进程并发,修改成一块共享数据的操作变成串行,保证是一个一个来修改的. 缺点:效率低,加锁过程复杂 优点:增加了安全性 from multiprocessing import ...
- 右键菜单添加git选项
1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 6.jpg 7.jpg