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

简介:

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

过程是这样的!

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

其次,在https://www.pdfescape.com/open/这个网站,将PDF文件上传上去,进行在线编辑。
TIM_20180622153927
也可以通过PDF软件工具,进行编辑。这里,我把需要填写部分的内容,全画上表单元素,设置元素的name,后面根据name 属性对其进行赋值。

添加表单元素,右键设置name属性。

TIM_20180622161754

再看看,表单都支持什么?
TIM_20180622162011

下面,我们新建一个控制台程序,通过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(微信也支持)。看看效果吧!
TIM_20180622154459

看看手机微信版!
IMG_2410_1_

目录
相关文章
|
2月前
|
Web App开发 Windows
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
296 0
|
2月前
|
JSON 关系型数据库 数据库
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】
|
27天前
|
IDE Java 编译器
使用Java分割PDF文件
使用Java分割PDF文件
29 1
|
6天前
|
JavaScript Java
Java 将Markdown文件转换为Word和PDF文档
【7月更文挑战第5天】Java中使用`Spire.Doc for Java`库可方便地将Markdown转换为Word或PDF。基本步骤包括导入模块,创建`Document`对象,加载Markdown文件,然后保存为目标格式(`.docx`或`.pdf`)。若遇到`Invalid UTF-8 stream`错误,需确保Markdown文件是UTF-8无BOM编码。页面设置可通过`PageSetup`类调整。注意,实际应用会依据具体需求和环境有所调整。
|
1月前
|
XML Java 数据格式
Java用xpdf库获取pdf文件的指定范围文本内容
Java用xpdf库获取pdf文件的指定范围文本内容
28 1
|
11天前
|
前端开发 Python
我们从`reportlab.pdfgen`模块中导入了`canvas`。这个模块提供了创建PDF文件所需的基本功能。
我们从`reportlab.pdfgen`模块中导入了`canvas`。这个模块提供了创建PDF文件所需的基本功能。
|
1月前
|
文字识别 开发工具 数据安全/隐私保护
印刷文字识别产品使用合集之可以识别一张电子发票有多页(多张图片,或者一个PDF文件)的这种发票吗
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
1月前
|
编解码 文字识别
印刷文字识别操作报错合集之在尝试将PDF文件转换为图片时出现了问题,具体的错误代码是415,该怎么处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
27天前
|
移动开发 JavaScript 前端开发
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
|
28天前
在线免费压缩pdf文件
在线免费压缩pdf文件
24 0