在PDF中填写表单域stringfileN4=TextBox1.Text+"LOG.pdf";File.Copy(Path.Combine(textBox4.Text+"\",fileN4),Path.Combine(Directory.GetCurrentDirectory(),fileN4),true);//打开文件PdfDocumentdocument=PdfReader.Open(fileN4,PdfDocumentOpenMode.Modify);PdfTextFieldcurrentField=(PdfTextField)(document.AcroForm.Fields[""]);//常量字符串caseName=TextBox1.Text;PdfStringcaseNamePdfStr=newPdfString(caseName);//设置该字段的值currentField.Value=caseNamePdfStr;//保存文档...document.Save(fileN4);所以PdfTextFieldcurrentField=(PdfTextField)(document.AcroForm.Fields[""]);是错误发生的地方。AcroForm似乎甚至无法识别这些字段。另一种选择是查找和替换PDF中的文本(不使用因许可证不可用的itextsharp)。任何帮助都会很棒!如果您尝试填充PDF表单域,您还需要将NeedsAppearances元素设置为true。否则,PDF将“隐藏”表单上的值。这是VB代码。如果objPdfSharpDocument.AcroForm.Elements.ContainsKey("/NeedAppearances")=FalseThenobjPdfSharpDocument.AcroForm.Elements.Add("/NeedAppearances",NewPdfSharp.Pdf.PdfBoolean(True))ElseobjPdfSharpDocument.NeedAppearance("/E.")=NewPdfSharp.Pdf.PdfBoolean(True)End如果我刚刚经历过类似的事情。我打开的第一个pdf文件不包含acroform数据并导致如上所述的nullexception。问题不是打开pdf,而是Acroform成员变量的引用值为空。您可以使用以下代码示例测试您的pdf:OpenFileDialogofd=newOpenFileDialog();如果(ofd.ShowDialog()==DialogResult.OK){PdfDocument_document=null;尝试{_document=PdfReader.Open(ofd.FileName,PdfDocumentOpenMode.Modify);}catch(Exceptionex){MessageBox.Show(ex.Message,"FATAL");//做任何清理并返回return;}if(_document!=null){if(_document.AcroForm!=null){MessageBox.Show("Acroform是对象","SUCCEEDED");//将acroform传递给某些函数以进行处理_document.Save(@"C:tempnewcopy.pdf");}else{MessageBox.Show("Acroform为null","FAILED");}}else{MessageBox.Show("Uknownerroropeningdocument","FAILED");ADENDUM我还注意到这行代码中的键不应该有尖括号document.AcroForm.Fields[""]将其更改为document.AcroForm.Fields["CASENUM"]我今天一直在研究它并且我设法创建了一个可行的解决方案。我在下面粘贴了我的工作代码。我在代码和OP之间看到的唯一真正区别如下:希望这可以帮助尝试做同样事情的人。stringtemplateDocPath=Server.MapPath("~/Documents/MyTemplate.pdf");PdfDocumentmyTemplate=PdfReader.Open(templateDocPath,PdfDocumentOpenMode.Modify);PdfAcroForm表单=myTemplate.AcroForm;如果(form.Elements.ContainsKey("/NeedAppearances")){form.Elements["/NeedAppearances"]=newPdfSharp.Pdf.PdfBoolean(true);}else{form.Elements.Add("/NeedAppearances",newPdfSharp.Pdf.PdfBoolean(true));}PdfTextFieldtestField=(PdfTextField)(form.Fields["TestField"]);testField.Text="012345";myTemplate.Save(Server.MapPath("~/Documents/Amended.pdf"));//保存到新文件。克服NullReferenceException的解决方案是使用Adob??eAcrobat打开预先制作的PDF,并通过将其属性类型更改为null以外的内容来为表单字段提供默认值。您尝试打开当前目录时是否尝试过将其放入?更改PdfDocument文档=PdfReader.Open(fileN4,PdfDocumentOpenMode.Modify);到PdfDocument文档=PdfReader.Open(Path.Combine(Directory.GetCurrentDirectory(),fileN4),PdfDocumentOpenMode.Modify);我很确定PdfReader需要一个完整的文件路径,尽管我只使用ASPOSE来创建pdf。以上就是《C#学习教程:PDF填表分享》的全部内容。如果对你有用,需要进一步了解《C#学习教程》,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
