iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件。

中文参考网站:http://hardrock.cnblogs.com/

http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=f5fe52dd-8419-4baa-ab1c-ea3f26952132

英文参考网站: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文件笔记的更多相关文章

  1. 根据PDF模板生成PDF文件(基于iTextSharp)

    根据PDF模板生成PDF文件,这里主要借助iTextSharp工具来完成.场景是这样的,假如要做一个电子协议,用过通过在线填写表单数据,然后系统根据用户填写的数据,生成电子档的协议.原理很简单,但是每 ...

  2. Java利用模板生成pdf并导出

    1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...

  3. 使用word模板生成pdf文件

    使用word模板生成pdf文件 源码:UserWord

  4. Android根据pdf模板生成pdf文件

    我们需要生成一些固定格式的pdf文件或者一些报表数据,那么我们可以用 iText包去做. 需要包含的jar包:iText-5.0.6.jar    iTextAsian.jar ,怎样jar包导入工程 ...

  5. NET二进制图片存储与读取的常见方法,iTextSharp添加图片生成PDF文件

    public void iTextSharpCreatPDF() { string pdfpath = System.Web.HttpContext.Current.Server.MapPath(&q ...

  6. java根据模板生成pdf

    原文链接:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支 ...

  7. Itext生成pdf文件

    来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...

  8. 利用html模板生成Word文件(服务器端不需要安装Word)

    利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...

  9. JavaWeb项目生成PDF文件添加水印图片并导出

    一.前言 首先需要在Maven中添加相应的jar包依赖,若项目没用到Maven,也可自行下载相应所需的jar包(itextpdf.jar 与 itext-asian.jar),如下图所示.点此下载 M ...

随机推荐

  1. PHP之流程控制

    nest 嵌套 the curly braces 花括号 colon syntax 冒号语法 PHP三种if判断的写法 写法一: if(true){ }else if(){ }else if(){ } ...

  2. [about remote controller]--mstsc-teamviewer-vnc,nomachine

    https://www.jianshu.com/p/c80db368ed8a https://www.nomachine.com/download Ubuntu安装VNC,VNC却无法随系统启动,遂换 ...

  3. CSDN论坛 > Delphi > VCL组件开发及应用 DBLookupComboBox用法

    (1)DataSource属性    该属性用于连接要编辑数据的主表数据源(2)DataField属性    该属性用于指定要编辑的数据字段名(3)ListSource属性    .    该属性用于 ...

  4. Django 之Redis配置

    目的:访问服务器频繁的读取数据库 ,会耗损服务器性能及降低用户体验,为此引入Redis 1,安装 redis(2.10.6兼容性更好) pip install redis 2,settings.py配 ...

  5. 【Python全栈-HTML】HTML入门

    HTML入门介绍 参考: https://www.bilibili.com/video/av21663728/?p=339 http://www.cnblogs.com/yuanchenqi/arti ...

  6. 集齐所有机制的按键控制LED驱动

    内核版本:linux2.6.22.6 硬件平台:JZ2440 驱动源码 final_key.c : #include <linux/module.h> #include <linux ...

  7. SpringBoot-@async异步执行方法

    启动加上@EnableAsync ,需要执行异步方法上加入  @Async 在方法上加上@Async之后 底层使用多线程技术 演示代码: @RestController @Slf4j public c ...

  8. 前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类

    表单控件分类 input标签: input标签 type属性的text,password,button按钮,submit按钮 input标签placeholder属性 标签上显示内容 input标签 ...

  9. 并发编程---互斥锁---互斥锁与join的区别

    互斥锁 互斥锁:就是把多个进程并发,修改成一块共享数据的操作变成串行,保证是一个一个来修改的. 缺点:效率低,加锁过程复杂 优点:增加了安全性 from multiprocessing import ...

  10. 右键菜单添加git选项

    1.jpg   2.jpg   3.jpg   4.jpg   5.jpg   6.jpg   7.jpg