itextsharp利用模板生成pdf文件笔记
Posted 涛声依旧1988
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, 11, Font.STRIKETHRU))); ////采用字体文件来生成字体,支持中文 phrase.Add(new Chunk("不公开33", new Font(PrintBaseFont, 11, Font.STRIKETHRU))); ColumnText column = new ColumnText(Canvas); column.SetSimpleColumn(131, 425, 504, 523, 23, 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 = 1; i <= reader.NumberOfPages; i++) { var page = appendedPdfWriter.GetImportedPage(reader, i); appendedDocument.NewPage(); appendedPdfContentByte.AddTemplate(page, 0, 0); } foreach (var existPdfPath in pdfPathsToAppend) { reader = new PdfReader(existPdfPath); for (int i = 1; i <= reader.NumberOfPages; i++) { var page = appendedPdfWriter.GetImportedPage(reader, i); appendedDocument.NewPage(); appendedPdfContentByte.AddTemplate(page, 0, 0); } } 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 = {175, 508, 175, 492, 90, 486, 90, 248}; float[] right = {500, 508, 500, 248}; ColumnText column = new ColumnText(canvas); column.setLeading(26, 0); column.setColumns(left, right); column.addText(proofsPhrase); column.go();
三、需要注意的坑
1、应用columnText时需要填写的内容不能为空字符串,否则报错
以上是关于itextsharp利用模板生成pdf文件笔记的主要内容,如果未能解决你的问题,请参考以下文章
C#如何利用itextSharp修改现有PDF文件内容,比如插入