iTextSharp连接PDF文档时出现问题
本文关键字:问题 文档 连接 PDF iTextSharp | 更新日期: 2023-09-27 17:59:09
我正试图从一堆其他PDF中构建一个PDF,我正在其中填写一些表单值。本质上,我正在进行PDF邮件合并。我的代码如下:
byte[] completedDocument = null;
using (MemoryStream streamCompleted = new MemoryStream())
{
using (Document document = new Document())
{
document.Open();
PdfCopy copy = new PdfCopy(document, streamCompleted);
copy.Open();
foreach (var item in eventItems)
{
byte[] mergedDocument = null;
PdfReader reader = new PdfReader(pdfTemplates[item.DataTokens[NotifyTokenType.OrganisationID]]);
using (MemoryStream streamTemplate = new MemoryStream())
{
using (PdfStamper stamper = new PdfStamper(reader, streamTemplate))
{
foreach (var token in item.DataTokens)
{
if (stamper.AcroFields.Fields.Any(fld => fld.Key == token.Key.ToString()))
{
stamper.AcroFields.SetField(token.Key.ToString(), token.Value);
}
}
stamper.FormFlattening = true;
stamper.Writer.CloseStream = false;
}
mergedDocument = new byte[streamTemplate.Length];
streamTemplate.Position = 0;
streamTemplate.Read(mergedDocument, 0, (int)streamTemplate.Length);
}
reader = new PdfReader(mergedDocument);
for (int i = 1; i <= reader.NumberOfPages; i++)
{
document.SetPageSize(PageSize.A4);
copy.AddPage(copy.GetImportedPage(reader, i));
}
}
}
completedDocument = new byte[streamCompleted.Length];
streamCompleted.Position = 0;
streamCompleted.Read(completedDocument, 0, (int)streamCompleted.Length);
}
我遇到的问题是,is在退出using (Document document = new Document())
块时抛出一个空引用异常。
从调试iTextSharp源来看,问题是PdfAnnotationsimp
中的以下方法
public bool HasUnusedAnnotations() {
return annotations.Count > 0;
}
annotations为null,因此会引发null ref异常。我应该做些什么来实例化它吗?
我更改了:
document.Open();
PdfCopy copy = new PdfCopy(document, streamCompleted);
至
PdfCopy copy = new PdfCopy(document, streamCompleted);
document.Open();
它解决了这个问题。这个库需要更好的异常处理。当你做了一件稍微错误的事情时,它会可怕地倒下,让你不知道自己做错了什么。如果我没有源代码,我不知道我怎么可能解决这个问题。
您使用的是什么版本的iTextSharp?Document
类没有实现IDisposable
,因此不能将其封装在using
块中。