Cet article présente principalement les connaissances pertinentes de C# pour créer et remplir des champs en PDF. Il a une très bonne valeur de référence, jetons un coup d'œil avec l'éditeur ci-dessous
Comme nous le savons tous, les documents PDF ne peuvent généralement pas être édités ou modifiés. Si l'utilisateur doit signer ou remplir d'autres contenus dans le document PDF, le document PDF doit comporter des champs modifiables. Les développeurs sont souvent confrontés au besoin de remplir des données dans les champs du modèle PDF de manière par programmation . À ce stade, vous devez résoudre les deux questions suivantes :
Comment créer des champs modifiables en PDF ?
Comment remplir avec précision le contenu de ces champs ?
Ici, je vais vous présenter comment utiliser les composants C# et Free Spire.PDF pour réaliser cette fonction.
Spire.PDF gratuitPrésentation des composants
Spire.PDF gratuit est un composant PDF professionnel gratuit à utiliser dans les applications .NET Créer, modifier, traiter et lire des documents PDF. Prend en charge les opérations de traitement de documents PDF riches, telles que la fusion/scission de documents PDF, la conversion (telle que HTML en PDF, PDF en images, etc.), l'impression (y compris l'impression silencieuse), la compression, l'ajout de commentaires, les paramètres de sécurité (y compris les signatures numériques) , création et remplissage de champs, insertion et extraction d'images, extraction et surlignage de texte, etc. Ne dépend pas d'Adobe Acrobat et prend en charge le chinois.
Concernant l'installation, il existe de nombreux canaux, dont le site officiel et NuGet, la méthode la plus appréciée et la plus couramment utilisée par les développeurs. Entrez la commande PowerShell suivante dans la console NuGet Package Manager de Visual Studio et appuyez sur Entrée, la dll du composant sera automatiquement référencée dans le projet :
PM> Install-Package FreeSpire.PDF
Mise en place de la création et du remplissage des champs
1. Créer un domaine
Ce composant fournit de nombreuses classes correspondantes grâce auxquelles nous pouvons créer une variété de domaines PDF. Comme il existe de nombreux types, je répertorie uniquement certains champs communs et les noms de classe correspondant aux champs dans les composants.
|
Nom de la classe | ||||||||||||||
Champ de texte | PdfTextBoxField | ||||||||||||||
Champ de signature | PdfSignatureField | ||||||||||||||
Box | PdfCheckBoxField | ComboBox | PdfComboBoxField | ||||||||||||
PdfListBoxField | |||||||||||||||
Bouton | PdfRadioButtonListField (bouton radio)PdfButtonField (bouton normal) |
Ici, je sélectionne les deux champs modifiables les plus courants dans les documents PDF à introduire : les champs de texte et les champs de signature.
1.1 Champ de texte
Tout d'abord, j'ai créé un champ de texte simple. Vous devez spécifier le nom du champ lors de la création. L'avantage est que s'il y a plusieurs champs de texte dans le document en même temps, lorsque nous remplissons les champs par programme, nous pouvons remplir le contenu rapidement et avec précision. le champ spécifié en fonction du nom du champ dans le domaine. Il est à noter que le nom de domaine ne doit pas être répété, sinon le contenu sera renseigné dans tous les champs correspondant au nom de domaine.
//创建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");
Bien sûr, la plupart du temps, nos besoins peuvent non seulement être de créer un simple champ de texte, mais également de définir d'autres paramètres, tels que le réglage bordures, couleurs d’arrière-plan et couleurs de police, disposition des polices. Même le contenu d'un champ de texte spécifié, par exemple uniquement des dates ou des nombres compris dans une certaine plage, peut être saisi.
Définissez le format :
//设置边框 textbox.BorderWidth = 0.75f; textbox.BorderStyle = PdfBorderStyle.Solid; textbox.BorderColor = Color.Black; //设置背景色 textbox.BackColor = Color.Yellow; //设置字体颜色 textbox.ForeColor = Color.Red; //设置字体排列方式 textbox.TextAlignment = PdfTextAlignment.Center;
Spécifiez le contenu de saisie du champ de texte :
Adobe Acrobat aide les développeurs à utiliser Javascript pour prédéfinir le format, le type, etc. du contenu de saisie des champs de texte. Ce composant prend également en charge ce type de script et fournit les méthodes correspondantes pour implémenter ces fonctions. Le tableau suivant répertorie certains Javascript et méthodes :
| Exemple | Javascript | Méthode | ||||||||||||||||||||||||||||||||
31/01/2008 | AFDate_FormatEx("mm/jj/aaaa"); AFDate_KeystrokeEx("mm/jj/aaaa"); | GetDateFormatString("mm/jj/aaaa"); GetDateKeyStringString("mm/jj/aaaa"); | |||||||||||||||||||||||||||||||||
31/01/2008 | AFDate_FormatEx("m/d/aaaa"); | //创建签名域并指定域名 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); Copier après la connexion GetDateKeyStringString("m/d/yyyy"); | |||||||||||||||||||||||||||||||||
Code postal | 12345 | AFSpecial_Format(0); AFSpecial_KeyString(0); | GetSpecialFormatString(0); | ||||||||||||||||||||||||||||||||
//加载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"); Copier après la connexion | 12345-1234 | AFSpecial_Format(1); AFSpecial_KeyString(1); | GetSpecialFormatString(1); GetSpecialKeyString(1); | ||||||||||||||||||||||||||||||||
Numéro de téléphone | (123) 456-7890 | AFSpecial_Format(2); AFSpecial_KeyString(2); | GetSpecialFormatString(2); GetSpecialKeyString(2); | ||||||||||||||||||||||||||||||||
Argent | 12 345,00 $ -12 345,00 $ | AFNumber_Format(2, 0, 0, 0, "$", vrai); AFNumber_KeyString(2, 0, 0, 0, "$", true); | GetNumberFormatString(2, 0, 0, 0, "$", true); GetNumberKeystrokeString(2, 0, 0, 0, "$", true); | ||||||||||||||||||||||||||||||||
Valider | 1≤valeur d'entrée≤10 | AFRange_Validate(true,1,true,10) | GetRangeValidateString(true, 1, true , 10); |