近段时间,客户有个需求就是有几种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