当前位置: 首页 > 知识库问答 >
问题:

iText 7 CreateText Box错误:对象引用未设置为对象的实例

居和顺
2023-03-14

创建新的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。冲洗();在“PdfPage PdfPage=pdfDoc.AddNewPage(pageSize);”之后语句在将第一个文本框添加到第一页时会导致相同的错误。

如何更正错误?

共有1个答案

慎懿轩
2023-03-14

我成功地使用了以下解决方法:

PdfPage pdfPage = pdfDoc.AddNewPage(); 
iText.Kernel.Geom.Rectangle pageRect = pdfPage.GetPageSize(); 
PdfCanvas pdfCanvas = new PdfCanvas(pdfPage); 
iText.IO.Image.ImageData pdfImageData = ImageDataFactory.Create(imageList[nPageNdx]); 
pdfCanvas.AddImage(pdfImageData, 0, 0, pageRect.GetWidth(), false); 

这是添加图像的另一种方式。

 类似资料:
  • 我需要将一些html转换为PDF。我遇到了IText7,它看起来是一个很好的解决方案。 我正在. net core 3.1中开发 但是,即使使用它的基本实现,我也会遇到一个错误: 每个人都喜欢这个错误: 对象引用未设置为对象的实例。 内部异常为null,唯一的线索是SerializationStackTraceString是: 在iText. IO. FontCache. cctor() 那么,它

  • 是否有建议使用具有段落的单元格构建表,以避免在向表或文档添加单元格时出现异常?我明白了,但我不知道会发生什么: 以下是使用Windows控制台项目的简单快照(与实际项目相比): 注意,注释的代码行: 添加它可以作为一种变通方法,使文档能够毫无例外地呈现。

  • 我试图在Windows控制台应用程序中下载azure Blob。当我构建和调试应用程序时,我的azure连接字符串引发了一个异常。这个字符串在我的其他ASP.NET应用程序中工作得很好。

  • 在我的ASP.NET程序中。我设置了一个受保护的列表。我在列表中添加了一个值。但它显示对象引用未设置为对象错误的实例 如何解决这个错误?

  • 我有以下C#类: 总而言之,区域设置有区域、按钮和字段。区域有中心和东部。中心和东部拥有产权。Fields包含具有属性firstName、lastName和ChooseLocale的标签。 在一个名为GetLocale的方法中,我有以下代码: 运行代码时,在以下行抛出一个“NullReferenceException was unhandled by user code”: 我设置属性title、

  • 我试图按照iText7文档中的一些内容在我的pdf文档中插入一个标题,但是GetPageSize()返回'Object reference not set to a Object实例‘。 我尝试通过PdfDocument对象和Document对象添加页面,并设置页面大小。我可以在循环中看到4页,但是,我所做的任何更改都不会给我一个页面大小。 错误消息System.NullReferenceExce