C# 在PDF中創建和填充域。本站提示廣大學習愛好者:(C# 在PDF中創建和填充域)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 在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");
AFDate_KeystrokeEx("mm/dd/yyyy");
GetDateFormatString("mm/dd/yyyy");
GetDateKeystrokeString("mm/dd/yyyy");
Date
1/31/2008
AFDate_FormatEx("m/d/yyyy");
AFDate_KeystrokeEx("m/d/yyyy");
GetDateFormatString("m/d/yyyy");
GetDateKeystrokeString("m/d/yyyy");
Zip code
12345
AFSpecial_Format(0);
AFSpecial_Keystroke(0);
GetSpecialFormatString(0);
GetSpecialKeystrokeString(0);
Zip+4
12345-1234
AFSpecial_Format(1);
AFSpecial_Keystroke(1);
GetSpecialFormatString(1);
GetSpecialKeystrokeString(1);
Phone number
(123) 456-7890
AFSpecial_Format(2);
AFSpecial_Keystroke(2);
GetSpecialFormatString(2);
GetSpecialKeystrokeString(2);
Money
$12,345.00
-$12,345.00
AFNumber_Format(2, 0, 0, 0, "$", true);
AFNumber_Keystroke(2, 0, 0, 0, "$", true);
GetNumberFormatString(2, 0, 0, 0, "$", true);
GetNumberKeystrokeString(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");
由於篇幅有限,以上只介紹了創建和填充域的功能,如果需要詳細了解其他的功能,請查看:https://www.e-iceblue.com/Introduce/free-pdf-component.html#.WMn1g9J4edU。如有任何疑問,歡迎給博主留言,博主會盡最大努力給你答復!
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持!