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 ...
随机推荐
- 关于.htaccess的设置
RewriteEngine On #设置是否开始rewrite RewriteBase / #设置开始匹配的目录,比如web程序放在/var/www/html/test下,则这个值要设置为" ...
- jMeter_响应数据乱码
jMeter测试时服务响应数据乱码 方式一:修改配置文件参数 1.修改jMeter安装目录 jmeter.properties 中 sampleresult.default.encoding=UTF- ...
- Java之旅_高级教程_序列化
摘自 :http://www.runoob.com/java/java-serialization.html Java序列化 Java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字 ...
- telnet测试端口的使用
端口开启后会跳转到 :
- TZOJ 3198: 区间和
描述 给定n个数据,有两个操作,加减其中的一个数据,当然还可查询在某段数据的和. 输入 输入数据有多组,每组数据的第一行输入n,1=<n<=500000,代表数据的个数.第二行输入具体数据 ...
- 使用Bootstrap Popover实现一个弹框上三角形的代码记录
$(function () { var options = { trigger: 'manual', content: function ...
- (4.23)sql server区服大小写的检索
是的,SQL Server数据库可以区分大小写.区分大小写意味着SQL Server将为CASE,Case,CaSe等返回不同的结果集,并将所提到的字符串视为3个不同的字符串.区分大小写的数据库具有区 ...
- 配置svn用户及密码
配置账户及密码 格式: user=passwd 配置新的账户 [root@mysql conf]# vim passwd 创建两个账户 [root@mysql conf]# egrep -v &q ...
- 如何调用finecms指定栏目的描述关键词
有时我们在用finecms建站时需要调用指定栏目的描述和关键词,实现个性化需求,比如id为23的栏目很重要,要让它在首页展示出来,这时我们要如何调用呢?{dr_cat_value(23, 'name' ...
- Perfmon——为什么“% Disk Time”计数器的值会大于100%?
最近在使用perfmon做性能测试时发现,“% Disk Time”计数器的值总是会大于100%.如下图所示. perfmon上对“% Disk Time”的中文描述为: % Disk Time 指所 ...