心灵的沉淀......

记录点滴心路历程,不断成长
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

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

 

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

      

 

Step2:打开Adobe LiveCycle ES2:

 

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

 

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

 

 

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

 

下面的一段代码是用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