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

    看看手机微信效果吧!

  • 相关阅读:
    Java实现 LeetCode 30 串联所有单词的子串
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 27 移除元素
    字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
  • 原文地址:https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html
Copyright © 2011-2022 走看看