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. 这就是使用ReportBuilder最简单的例子

    用这组控件最简单的例子:在窗体上放上组件名为ppBDEPipeline1,ppReport1,ppDesigner1,ppViewer1,DataSource1的控件,设置ppreport1的data ...

  2. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  3. Java之旅_面向对象_接口

    参考摘自:http://www.runoob.com/java/java-interfaces.html 接口(interface)在Java中是一个抽象类型,是抽象方法的集合. 一个类通过imple ...

  4. POJ1845 sumdiv 数论

    正解:小学数学数论 解题报告: 传送门! 其实不难但我数学这个方面太菜了所以还是多写点儿博客趴QAQ 然后因为是英文的所以先翻译一下,,,? 大概就是说求AB的所有约数之和,对9901取膜 这个只需要 ...

  5. python 去除微软的BOM

    傻逼微软会给文件前面加上efbbbf, 导致开发人员浪费很多时间在排错上,下面通过python代码来实现去除微软BOM的功能 用法很简单,指定可能含有BOM开头的文件,并且将微软的\r\n 换成lin ...

  6. Webpack傻瓜式指南(转)

    add by zhj: 作者写了三篇文章,这是第一篇幅,另外两篇参见 https://zhuanlan.zhihu.com/p/20397902 https://zhuanlan.zhihu.com/ ...

  7. linux 内核启动流程分析,移植

    分析 linux-2.6.22.6 内核启动流程 移植 linux-3.4.2 到 JZ2440 开发板 Linux内核源码百度云链接: https://pan.baidu.com/s/1m1ymGl ...

  8. ef codefirst 模型字段类型与sqlserver表字段类型对应概要

    1.sqlserver中nvarchar(50),对应EF中: [MaxLength(, ErrorMessage = "最大长度为{1}")] public string Nam ...

  9. sublime phpfmt 的格式化

    php格式化有几种,这里只说phpfmt.这个插件只支持php7.0+,所以在安装php环境应该支持php7.0.至于低版本,在packagecontrol.io对应的插件页面也又提到. 在subli ...

  10. wamp设置本地访问路径为a.com

    我们在用wamp进行本地建站时经常会碰到页面样式无法正常加载,这是因为没有正确加载css路径,那我们就用wamp设置本地访问路径为a.com指向本地的一个虚拟空间,如何操作呢?下面就跟随ytkah一起 ...