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

iText 7 CreateText Box错误:对象引用未设置为对象的实例,itext,itext7,Itext,Itext7,创建新的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文档时会发生以下情况。在第三页上创建第一个文本字段时出错。在前两个页面上创建了多个字段,没有任何问题

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
private void CreatePDFFile(List-imageList、int-nImgCnt、SqlConnection-sqlPagesConnect)
{
字符串sFontName=“”;
双倍重量=0.0;
布尔bFontBold=false;
PdfWriter PdfWriter=新的PdfWriter(“C:\\tmp\\images\\MikeA.pdf”);
使用(PdfDocument pdfDoc=新PdfDocument(pdfWriter))
{
int-nPageNdx=0;
单据单据=新单据(pdfDoc);
文件设置边距(0,0,0,0);
而(nImgCnt>nPageNdx)
//而(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=新页面大小(fImageWidth、fImageHeight);
PdfPage PdfPage=pdfDoc.AddNewPage(页面大小);
文件添加(pdfImage);
==>SQL数据库设置
尝试
{
while(sqlPagesReader.Read())
{
==>设置数据库中的变量
//提醒:页面左上角的O方向为0,0。PDF方向为页面左下角的0.0。
//x和y必须缩放到图像的宽度和高度。
浮动fTextBoxWidth=((浮动)nRightPos-(浮动)nLeftPos)*fImageWidth;
浮动fTextBoxHeight=((浮动)nBottomPos-(浮动)nTopPos)*fImageHeight;
float fTextBoxX=fImageWidth*(float)nLeftPos;
浮动fTextBoxY=fImageHeight*(浮动)((1.0-nBottomPos));
iText.Kernel.Geom.Rectangle textBoxRect=新的iText.Kernel.Geom.Rectangle(fTextBoxX,fTextBoxY,fTextBoxWidth,fTextBoxHeight);
第387行var myPdfField=PdfTextFormField.CreateText(pdfDoc,textBoxRect,sAssignedName,“abc”,fieldFont,(float)nFontWeight);
PdfAcroForm.GetAcroForm(pdfDoc,true).AddField(myPdfField);
}
}
最后
{
((IDisposable)sqlPagesCommand.Dispose();
((IDisposable)sqlPagesReader.Dispose();
}
nPageNdx++;
doc.Flush();
}//当nImgCnt
doc.Close();//将PDF写入磁盘
pdfDoc.Close();
}
}//结束CreatePdfile
插入pdfPage.Flush();在“PdfPage PdfPage=pdfDoc.AddNewPage(pageSize);”语句之后,将第一个文本框添加到第一个页面时,会导致相同的错误


如何更正错误?

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

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); 
这是添加图像的另一种方法