利用Adobe LiveCycle ES2创建PDF模板,并用C#替换模板中的Acrobat 控件的值
Posted on 2012-03-25 23:22 lucio 阅读(1171) 评论(1) 收藏 举报近段时间,客户有个需求就是有几种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
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
浙公网安备 33010602011771号