利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值

     近段时间,客户有个需求就是有几种60多页的PDF文档,之前的做法是用Word结合Excel的方式,很多东西都是靠人工眼力校对,效率和准确度都得不到保证,故采取编程的方式帮助用户提高效率,具体的实现过程如下:

 

准备工作:安装Acrobat,具体可以上Adobe的官网上下载

 

Step1:安装Acrobat X,这里安装是10版本,现在应该有更新的版本了

       利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值_第1张图片

 

Step2:打开Adobe LiveCycle ES2:

利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值_第2张图片

 

Step3:打开或新建一个文档,插入一个TextBox:

利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值_第3张图片

利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值_第4张图片

 

Step4 :依次选择Custom,设置Border:none;背景为Solid

利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值_第5张图片

  利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值_第6张图片

 

最后一步比较重要,每一个TextBox的Name一定要设置得不一样

利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值_第7张图片

 

下面的一段代码是用C#代码替换我们设置的TextBox里面的文本:

 

 1   using ( var existingFileStream =  new FileStream(fileNameExisting, FileMode.Open))
 2          using ( var newFileStream =  new FileStream(fileNameNew, FileMode.Create))
 3         {
 4 
 5              //  Open existing PDF  
 6               var pdfReader =  new PdfReader(existingFileStream);
 7 
 8              //  PdfStamper, which will create  
 9              PdfStamper stamper =  new PdfStamper(pdfReader, newFileStream);
10              var form = stamper.AcroFields;
11              var fieldKeys = form.Fields.Keys;
12              string strFieldValue =  string.Empty;
13              // int i = 0;
14               if (fileNameExisting.Contains( " SetupPackage_16_ANZV2.pdf ") || fileNameExisting.Contains( " SetupPackage_16_ANZV2_03.pdf ") || fileNameExisting.Contains( " SetupPackage_16_ANZV2_04.pdf ") || fileNameExisting.Contains( " SetupPackage_16Company_ANZV2 ") || fileNameExisting.Contains( " SetupPackage_10_ATOTrusteeDeclaration.pdf "))
15             {
16                  string imgRightPath =HttpContext.Current.Server.MapPath( " ~/nnfunds/template/img/imgRight.jpg ");
17                  string imgSignaturePath = HttpContext.Current.Server.MapPath( " ~/nnfunds/template/img/imgSignature.jpg ");
18                  string imgDatePath = HttpContext.Current.Server.MapPath( " ~/nnfunds/template/img/imgDate.jpg "); // imgDate
19                   foreach ( string fieldKey  in fieldKeys)
20                 {
21                      if (fieldKey.Contains( " imgRight ") || fieldKey.Contains( " imgSignature ") || fieldKey.Contains( " imgDate "))
22                     {
23                         iTextSharp.text.Image instanceImg = iTextSharp.text.Image.GetInstance(imgRightPath);
24                          if(fieldKey.Contains( " imgSignature "))
25                         {
26                             instanceImg = iTextSharp.text.Image.GetInstance(imgSignaturePath);
27                         }
28                          if (fieldKey.Contains( " imgDate "))
29                         {
30                             instanceImg = iTextSharp.text.Image.GetInstance(imgDatePath);
31                         }
32                         PdfContentByte overContent = stamper.GetOverContent( 2);
33                          // PdfContentByte overContent1 = stamper.GetOverContent(3);
34                           // Specifying the name of the field wehere this image will be placed
35 
36                          var imageArea = form.GetFieldPositions(fieldKey)[ 0];
37 
38 
39                         iTextSharp.text.Rectangle imageRect =  new Rectangle(imageArea.position.Left,
40                                                                             imageArea.position.Bottom,
41                                                                             imageArea.position.Right,
42                                                                             imageArea.position.Top);
43 
44                         instanceImg.ScaleToFit(imageRect.Width, imageRect.Height);
45 
46                         instanceImg.SetAbsolutePosition(
47                             imageArea.position.Right - instanceImg.ScaledWidth +
48                             (imageRect.Width - instanceImg.ScaledWidth) /  2,
49                             imageArea.position.Bottom + (imageRect.Height - instanceImg.ScaledHeight) /  2);
50 
51                         overContent.AddImage(instanceImg);
52                          // overContent1.AddImage(instanceImg);
53                      }
54                      if (fieldKey.Contains( " imgpDate1 "))
55                     {
56                         iTextSharp.text.Image instanceImg = iTextSharp.text.Image.GetInstance(imgDatePath);
57                         PdfContentByte overContent = stamper.GetOverContent( 3);
58                          var imageArea = form.GetFieldPositions(fieldKey)[ 0];
59 
60 
61                         iTextSharp.text.Rectangle imageRect =  new Rectangle(imageArea.position.Left,
62                                                                             imageArea.position.Bottom,
63                                                                             imageArea.position.Right,
64                                                                             imageArea.position.Top);
65 
66                         instanceImg.ScaleToFit(imageRect.Width, imageRect.Height);
67 
68                         instanceImg.SetAbsolutePosition(
69                             imageArea.position.Right - instanceImg.ScaledWidth +
70                             (imageRect.Width - instanceImg.ScaledWidth) /  2,
71                             imageArea.position.Bottom + (imageRect.Height - instanceImg.ScaledHeight) /  2);
72 
73                         overContent.AddImage(instanceImg);
74                     }
75                      else
76                     {
77                         strFieldValue = GetFieldValue(hshTable, form.GetField(fieldKey));
78                         form.SetField(fieldKey, strFieldValue);
79                     }
80                 }
81             }
82              else
83             {
84                  foreach ( string fieldKey  in fieldKeys)
85                 {
86                     strFieldValue = GetFieldValue(hshTable, form.GetField(fieldKey));
87                     form.SetField(fieldKey, strFieldValue);
88                 }
89             }
90              //  "Flatten" the form so it wont be editable/usable anymore  
91              stamper.FormFlattening =  true;
92             stamper.Close();
93             pdfReader.Close();
94         }
95         

 

这里用到了第三方组件ItextSharp

 

你可能感兴趣的:(利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值)