【发布时间】:2018-04-18 18:22:57
【问题描述】:
创建新的 PDF 文档时会发生以下情况。在第三页上创建第一个文本字段时发生错误。在前两页上创建了多个字段,没有问题。
Image processing failed - Exception: Object reference not set to an instance of an object.
Stack Trace: at KernelExtensions.Get[TKey,TValue](IDictionary`2 col, TKey key)
at iText.Kernel.Pdf.PdfDictionary.Get(PdfName key, Boolean asDirect)
at iText.Kernel.Pdf.PdfDictionary.GetAsArray(PdfName key)
at iText.Kernel.Pdf.PdfPage.GetAnnotations()
at iText.Kernel.Pdf.Annot.PdfAnnotation.GetPage()
at iText.Forms.Fields.PdfFormField.RegenerateField()
at iText.Forms.Fields.PdfFormField.SetValue(String value, Boolean generateAppearance)
at iText.Forms.Fields.PdfFormField.SetValue(String value)
at iText.Forms.Fields.PdfFormField.CreateText(PdfDocument doc, Rectangle rect, String name, String value, PdfFont font, Single fontSize)
at MikeA.CoreLogic.CreatePDFFile(List`1 imageList, Int32 nImgCnt, SqlConnection sqlPagesConnect) in C:\ef-pdfGen0\CoreLogic.cs:line 387
相关代码:
private void CreatePDFFile(List<byte[]> imageList, int nImgCnt, SqlConnection sqlPagesConnect)
{
String sFontName = "";
Double nFontWeight = 0.0;
Boolean bFontBold = false;
PdfWriter pdfWriter = new PdfWriter("C:\\tmp\\images\\MikeA.pdf");
using (PdfDocument pdfDoc = new PdfDocument(pdfWriter))
{
int nPageNdx = 0;
Document doc = new Document(pdfDoc);
doc.SetMargins(0,0,0,0);
while (nImgCnt > nPageNdx)
// while(nPageNdx < 1)
{
iText.Layout.Element.Image pdfImage = new iText.Layout.Element.Image(iText.IO.Image.ImageDataFactory.Create(imageList[nPageNdx], true));
float fImageWidth = pdfImage.GetImageWidth();
float fImageHeight = pdfImage.GetImageHeight();
PageSize pageSize = new PageSize(fImageWidth, fImageHeight);
PdfPage pdfPage = pdfDoc.AddNewPage(pageSize);
doc.Add(pdfImage);
==> SQL DB setup
try
{
while (sqlPagesReader.Read())
{
==> Setting variables from the database
// Reminder:O orientation is 0,0 at top left of page. PDF orientation is 0.0 bottom left of page.
// x and y must be scaled to the image width and height.
float fTextBoxWidth = ((float)nRightPos - (float)nLeftPos) * fImageWidth;
float fTextBoxHeight = ((float)nBottomPos - (float)nTopPos) * fImageHeight;
float fTextBoxX = fImageWidth * (float)nLeftPos;
float fTextBoxY = fImageHeight * (float)((1.0 - nBottomPos));
iText.Kernel.Geom.Rectangle textBoxRect = new iText.Kernel.Geom.Rectangle(fTextBoxX, fTextBoxY, fTextBoxWidth, fTextBoxHeight);
Line 387 var myPdfField = PdfTextFormField.CreateText(pdfDoc, textBoxRect, sAssignedName, "abc", fieldFont, (float)nFontWeight);
PdfAcroForm.GetAcroForm(pdfDoc, true).AddField(myPdfField);
}
}
finally
{
((IDisposable)sqlPagesCommand).Dispose();
((IDisposable)sqlPagesReader).Dispose();
}
nPageNdx++;
doc.Flush();
} // While nImgCnt
doc.Close(); // Writes the PDF to disk
pdfDoc.Close();
}
} // End CreatePDFFile
插入 pdfPage.Flush();在“PdfPage pdfPage = pdfDoc.AddNewPage(pageSize);”之后将第一个文本框添加到第一页时,语句会导致相同的错误。
如何纠正错误?
【问题讨论】: