根据PDF模板⽣成PDF⽂件(基于iTextSharp)
根据PDF模板⽣成PDF⽂件,这⾥主要借助iTextSharp⼯具来完成。场景是这样的,假如要做⼀个电⼦协议,⽤过通过在线填写表单数据,然后系统根据⽤户填写的数据,⽣成电⼦档的协议。原理很简单,但是每个技术⼈员解决问题的思路不太⼀样。也有朋友直接通过Canvas来实现,过程是把内容排版好,然后⽣成图⽚,然后根据图⽚⽣成PDF⽂件,这种⽅式有个问题,如果要是要求兼容移动端的话,在移动设备上排版出来的效果肯定不太⼀样,导致最终⽣成的电⼦协议和期望的相差太⼤。下⾯我们就利⽤PDF中的表单元素,来完成PDF内容的替换。过程是这样的!
我这边收到⼀份word版的⽂档,⾸先,我们将其另存为PDF⽂件。
也可以通过PDF软件⼯具,进⾏编辑。这⾥,我把需要填写部分的内容,全画上表单元素,设置元素的name,后⾯根据name 属性对其进⾏赋值。具体操作,将text放置指定处,然后⿏标右键,看到如下界⾯:
这⾥Name属性就是后⾯我们要⽤到的。⽬前它⽀持的元素有:
下⾯,我们新建⼀个控制台程序,通过nuget获取itextSharp。控制台代码如下:
/// //////
/// 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(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(微信也⽀持)。看看效果吧!
看看⼿机微信效果吧!