尽人皆知,PDF文档通常是不能编辑和修正的。假如用户须要在PDF文档中署名或许填写其他内容时,就须要PDF文档中有可编辑的域。开发者也经常会碰到将数据以编程的体式格局添补到PDF模板域的需求。这时刻就须要处置惩罚以下两个题目:
如安在PDF中建立可编辑的域?
如何将内容正确地填写到这些域中?
这里我将引见如何运用C#和Free Spire.PDF组件来完成这一功用。
Free Spire.PDF组件概述
Free Spire.PDF是一个免费专业的PDF组件,用于在.NET应用程序中建立,编辑,处置惩罚和浏览PDF文档。支撑雄厚的PDF文档处置惩罚操纵,如PDF文档兼并/拆分、转换(如HTML转PDF,PDF转图片等)、打印(包含寂静打印)、紧缩、增加解释、平安设置(包含数字署名)、建立与添补域、图片插进去与提取、文本提取与高亮等。不依赖Adobe Acrobat,而且支撑中文。
关于装置,有许多种渠道,包含官网以及开发者最喜欢和经常使用的NuGet体式格局。在Visual Studio的 NuGet Package Manager Console中输入以下PowerShell敕令回车,组件的dll就会自动地引用到项目中:
PM> Install-Package FreeSpire.PDF
建立和添补域的完成
1.建立域
该组件供应了许多对应的类,经由过程这些类我们能够建立多种PDF域。由于品种比较多,所以下面我只列出了一些罕见的域和该域在组件中所对应的类名。
域名 |
类名 |
文本域 |
PdfTextBoxField |
署名域 |
PdfSignatureField |
复选框 |
PdfCheckBoxField |
组合框 |
PdfComboBoxField |
列表框 |
PdfListBoxField |
按钮 |
PdfRadioButtonListField(单选按钮) PdfButtonField (一般按钮) |
这里我拔取PDF文档中最罕见的两种可编辑域举行引见:文本域和署名域。
1.1 文本域
起首,我建立了一个简朴的文本域。在建立的时刻须要指定域的称号,如许做的优点在于,假如文档中同时存在多个文本域,当我们以编程的体式格局填写域的时刻,能够依据域的称号疾速正确地将内容填写到指定的域中。须要注重的是域名不要反复,不然会将内容填写到该域名对应的一切域中。
//建立PDF文档 PdfDocument pdf = new PdfDocument(); //增加一个新页面 PdfPageBase page = pdf.Pages.Add(PdfPageSize.A4, new PdfMargins()); //增加文本到页面 PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", 10f), true); page.Canvas.DrawString("岁数:", font, PdfBrushes.DeepSkyBlue, 10, 50); //建立文本域并指定文本域的称号 PdfTextBoxField textbox = new PdfTextBoxField(page, "Age"); //设置文本域的大小、位置、字体 textbox.Bounds = new RectangleF(40, 50, 50, 12); textbox.Font = font; //增加文本域到文档 pdf.Form.Fields.Add(textbox); //保存文档 pdf.SaveToFile("Fields.pdf");
固然多半时刻我们的需求能够不止是建立一个简朴的文本域,还须要做一些其他设置,如设置边框、背景色、字体色彩、字体分列体式格局。以至是指定文本域的输入内容,如只能输入日期或某一范围内的数字等。
设置花样:
//设置边框 textbox.BorderWidth = 0.75f; textbox.BorderStyle = PdfBorderStyle.Solid; textbox.BorderColor = Color.Black; //设置背景色 textbox.BackColor = Color.Yellow; //设置字体色彩 textbox.ForeColor = Color.Red; //设置字体分列体式格局 textbox.TextAlignment = PdfTextAlignment.Center;
指定文本域的输入内容:
Adobe Acrobat支撑开发者运用Javascript来预先定义文本域输入内容的花样、范例等。该组件也支撑这类script并供应了对应的要领来完成这些功用。下表列出了部份Javascript和要领:
形貌 |
示例 |
Javascript |
要领 |
Date |
01/31/2008 |
AFDate_FormatEx("mm/dd/yyyy"); |
GetDateFormatString("mm/dd/yyyy"); |
Date |
1/31/2008 |
AFDate_FormatEx("m/d/yyyy"); |
GetDateFormatString("m/d/yyyy"); |
Zip code |
12345 |
AFSpecial_Format(0); |
GetSpecialFormatString(0); |
Zip+4 |
12345-1234 |
AFSpecial_Format(1); |
GetSpecialFormatString(1); |
Phone number |
(123) 456-7890 |
AFSpecial_Format(2); |
GetSpecialFormatString(2); |
Money |
$12,345.00 |
AFNumber_Format(2, 0, 0, 0, "$", true); |
GetNumberFormatString(2, 0, 0, 0, "$", true); |
Validate |
1≤input value≤10 |
AFRange_Validate(true,1,true,10) |
GetRangeValidateString(true, 1, true, 10); |
示例:
//指定输入数据在1-100之间 string js = PdfJavascript.GetRangeValidateString(true, 1, true, 100); PdfJavascriptAction jsAction = new PdfJavascriptAction(js); textbox.Actions.Validate = jsAction;
1.2 署名域
建立署名域与文本域相似,也能够设置域的边框、大小、位置等属性。这里就不再赘述了。
//建立署名域并指定域名 PdfSignatureField signaturefield = new PdfSignatureField(page, "Signature"); //设置域的边框 signaturefield.BorderWidth = 1.0f; signaturefield.BorderStyle = PdfBorderStyle.Solid; signaturefield.BorderColor = new PdfRGBColor(System.Drawing.Color.Black); //设置高亮形式 signaturefield.HighlightMode = PdfHighlightMode.Outline; //设置大小与位置 signaturefield.Bounds = new RectangleF(40, 150, 200, 100); //将署名域增加到页面 pdf.Form.Fields.Add(signaturefield);
2. 添补域
添补域时须要先猎取文档中一切的域,然后再一一添补指定域。假如统一范例的域比较多,则可运用域的称号疾速添补。
//加载PDF文档 PdfDocument pdf = new PdfDocument(); pdf.LoadFromFile("Fields.pdf"); //猎取第一页 PdfPageBase page = pdf.Pages[0]; //猎取文档的一切域 PdfFormWidget form = pdf.Form as PdfFormWidget; //添补第一个文本域 PdfTextBoxFieldWidget textboxField = form.FieldsWidget[0] as PdfTextBoxFieldWidget; textboxField.Text = "25"; //添补第二个署名域 PdfSignatureFieldWidget signatureField = form.FieldsWidget[1] as PdfSignatureFieldWidget; String pfxPath = @"gary.pfx"; PdfCertificate digi = new PdfCertificate(pfxPath, "123456"); PdfSignature signature = new PdfSignature(pdf, page, digi, "demo", signatureField); signature.IsTag = true; signature.DigitalSigner = "Gary"; signature.ConfigGraphicType = ConfiguerGraphicType.TextSignInformation; //保存文档 pdf.SaveToFile("Fill.pdf");
以上就是C#在PDF中建立和添补域的细致引见(图文)的细致内容,更多请关注ki4网别的相干文章!