zoukankan      html  css  js  c++  java
  • 根据PDF模板生成PDF文件(基于iTextSharp)

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

    过程是这样的!

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

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

    也可以通过PDF软件工具,进行编辑。这里,我把需要填写部分的内容,全画上表单元素,设置元素的name,后面根据name 属性对其进行赋值。具体操作,将text放置指定处,然后鼠标右键,看到如下界面:

    这里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:WindowsFontssimhei.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(微信也支持)。看看效果吧!

    看看手机微信效果吧!

  • 相关阅读:
    font-weight:bolder与设置数值的区别
    纯CSS3打造圆形菜单
    CSS Specificity
    控制页面内跳转
    解决Python操作MySQL中文乱码的问题
    字体图标font-awesome
    linux下安装使用MySQL 以及 python mysqldb 遇到的问题
    CocosCreator游戏开发(二)SocketIO简易教程
    CocosCreator游戏开发---菜鸟学习之路(一)资料整理
    2017已经接近尾声,然而我却什么都没干成
  • 原文地址:https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html
Copyright © 2011-2022 走看看