为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
深度学习

根据PDF模板生成PDF文件,这里主要借助iTextSharp工具来完成。场景是这样的,假如要做一个电子协议,用过通过在线填写表单数据,然后系统根据用户填写的数据,生成电子档的协议。原理很简单,但是每个技术人员解决问题的思路不太一样。也有朋友直接通过Canvas来实现,过程是把内容排版好,然后生成图片,然后根据图片生成PDF文件,这种方式有个问题,如果要是要求兼容移动端的话,在移动设备上排版出来的效果肯定不太一样,导致最终生成的电子协议和期望的相差太大。下面我们就利用PDF中的表单元素,来完成PDF内容的替换。

过程是这样的!

我这边收到一份word版的文档,首先,我们将其另存为PDF文件。

其次,在https://www.pdfescape.com/open/这个网站,将PDF文件上传上去,进行在线编辑。 

https://img1.sycdn.imooc.com//5b2cb02f0001d6b716580763.jpg

也可以通过PDF软件工具,进行编辑。这里,我把需要填写部分的内容,全画上表单元素,设置元素的name,后面根据name 属性对其进行赋值。

下面,我们新建一个控制台程序,通过nuget获取itextSharp。

控制台代码如下:

复制代码

 /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {            string tempFilePath = "D:\\a.tmp.pdf";
            iTextSharp.text.pdf.PdfDocument document = new iTextSharp.text.pdf.PdfDocument();

            iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(@"D:\d.pdf");
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(tempFilePath, FileMode.OpenOrCreate));
            AcroFields pdfFormFields = pdfStamper.AcroFields;
            pdfStamper.FormFlattening = true;            //BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            BaseFont simheiBase = BaseFont.CreateFont(@"C:\Windows\Fonts\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);            //添加图片            //Image image = Image.GetInstance("");            //pdfStamper.Writer.Add(image);
            pdfFormFields.AddSubstitutionFont(simheiBase);
            pdfStamper.AcroFields.SetField("Names", "李朝强");
            pdfStamper.AcroFields.SetField("chk", "yes", true);
            pdfStamper.Close();
            pdfReader.Close();            ////解析文本
            //PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);            //PdfWriter pdfWriter;            //ITextExtractionStrategy strategy;            //strategy = parser.ProcessContent<SimpleTextExtractionStrategy>(1, new SimpleTextExtractionStrategy());            //string ss = strategy.GetResultantText();            //byte[] buffer = pdfReader.GetPageContent(1);            //string strBody = System.Text.Encoding.Default.GetString(buffer);
        }

复制代码

上面代码,根据D盘的d.pdf模板,来生成最终的PDF文件。这里通过给AcroFields中的字段赋值,来达到替换内容的目的。

上面还有一种复选框(checkbox)的内容,pdf也支持,这里直接给其赋值yes或no,来控制是否选中。

最后一步就是将生成的PDF进行展示了。这里借助于pdf.js(微信也支持)。看看效果吧!

https://img1.sycdn.imooc.com//5b2cb03f00010ab604870793.jpg

看看手机微信效果吧!

https://img1.sycdn.imooc.com//5b2cb0630001ddd812422208.jpg

原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消