C#在PDF中建立和填充域的詳細介紹(圖文)

來源:互聯網
上載者:User
本文主要介紹了C# 在PDF中建立和填充域的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧

眾所周知,PDF文檔通常是不能編輯和修改的。如果使用者需要在PDF文檔中籤名或者填寫其他內容時,就需要PDF文檔中有可編輯的域。開發人員也經常會遇到將資料以編程的方式填充到PDF模板域的需求。這時候就需要解決以下兩個問題:

  1. 如何在PDF中建立可編輯的域?

  2. 如何將內容準確地填寫到這些域中?

這裡我將介紹怎樣使用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");

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.