我正在尝试使用ITextSharp (5.5.13.3版)在C#控制台应用程序中打开一个pdf文件来填充表单字段,但是当我试图用流实例化PdfStamper时,我就被困住了。我已经尝试了大约十几个pdf可填充文件(没有锁定,也没有加密)和验证权限(设置为"EveryOne"),但是不知道什么是null!从我所知道的情况来看,流是有效的,而PdfReader实际上正在打开该文件。这是我第一次尝试这样做,但找不到一个真正的工作例子(我从一个网站上复制了这个例子,但它不起作用)。会不会是流错了类型?错误信息是:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
由于阅读器(我可以调试和查看pdf文件和表单字段的所有属性,没有问题)和流都被实例化了,这会是什么呢?
using (MemoryStream ms = new MemoryStream())
{
PdfReader pdfReader = new PdfReader("D:/TestData/Direct Deposit Signup Form.pdf");
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, ms, '\0', true))
{ ... }
错误出现在
使用pdfStamper
线路。文件在哪里和安全设置似乎都不重要。
完全错误(不过,和往常一样,谁知道到底发生了什么,这是如此的神秘):
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=itextsharp
StackTrace:
at iTextSharp.text.Version.GetInstance()
我以前没有使用过这个工具,但是我希望看到一个有用的例子--也许MemoryStream就是问题所在。不知道该从哪里开始找。也许我应该将它们的源代码下载到另一个项目中并进行调试?有什么想法吗?
发布于 2022-10-17 02:57:26
我在用VS 2022。在“调试选项”中,“打开”“只是我的代码”为我工作。这里提到的是iTextSharp GetInstance - NullReferenceException错误
发布于 2022-08-29 04:10:51
找到一个解决方案:使用PDFSharp!它只是起作用了-下面是一个例子
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
namespace WPFfiller3
{
public class Program
{
static void Main(string[] args)
{
FillPdfFields(@"D:\TestData\SampleForm-1.pdf", @"D:\TestData\SampleForm-1-FILLED.pdf");
}
private static void FillPdfFields(string SourcePDF, string DestinationPDF)
{
using (PdfDocument pd = PdfReader.Open(SourcePDF, PdfDocumentOpenMode.Modify))
{
int TotalFields = pd.AcroForm.Fields.Count;
for (int i = 0; i < TotalFields; i++)
{
pd.AcroForm.Fields[i].Value = new PdfString("test123");
}
pd.Save(DestinationPDF);
}
}
}
}
使用的测试PDF文件在这里SampleForm-1.pdf
https://stackoverflow.com/questions/73523079
复制相似问题