【发布时间】:2018-11-21 12:55:23
【问题描述】:
我不敢相信,我所看到的...... 我尝试将带有 itext7 的表格打印到定义页面上的 PDF 中。表格创建是完成 PDF 之前的最后一条语句。
PDF 有(完成后)5 页。我可以将表格打印到除第一页之外的每一页。
这是我的代码:
If placeOnPage = 0 Then
table.SetFixedPosition(200, 250, 100)
Else
table.SetFixedPosition(placeOnPage, 200, 250, 100)
End If
如果 placeOnPage = 0,则表格将正确打印在最后一页。如果我将 placeOnPage 设置为 2 到 5 之间的值,则表格将正确放置在第 2、3、4 或 5 页上。但如果我将 placeOnPage 设置为 1,则会在该行出现错误
doc.add(table)
错误提示:
System.NullReferenceException: "object reference not set to an instance of an object"
我不知道哪个对象是 NULL。在我所有的尝试中,其他一切都完全相同....
谁能给我一个提示?
问候,
本尼
堆栈跟踪:
bei KernelExtensions.Get[TKey,TValue](IDictionary´2 col, TKey key)
bei iText.Kernel.Pdf.PdfDictionary.Get(PdfName key, Boolean asDirect)
bei iText.Kernel.Pdf.PdfDictionary.Get(PdfName key)
bei iText.Kernel.Pdf.PdfPage.GetContentStreamCount()
bei iText.Kernel.Pdf.PdfPage.GetLastContentStream()
bei iText.Kernel.Pdf.Canvas.PdfCanvas.GetPageStream(PdfPage page)
bei iText.Kernel.Pdf.Canvas.PdfCanvas..ctor(PdfPage page, Boolean wrapOldContent)
bei iText.Layout.Renderer.DocumentRenderer.FlushSingleRenderer(IRenderer resultRenderer)
bei iText.Layout.Renderer.RootRenderer.AddChild(IRenderer renderer)
bei iText.Layout.RootElement´1.CreateAndAddRendererSubTree(IElement element)
bei iText.Layout.RootElement´1.Add(IBlockElement element)
bei iText.Layout.Document.Add(IBlockElement element)
bei iTextPDF.class_iTextPDF.TableEnd() in D:\Documents\15 - Visual Studio Projects\iTextPDF\iTextPDF\iTextPDF.vb:Zeile 1668.
bei iTextPDF.class_iTextPDF.addTextFrame(String text, String posLowerLeftPointFromLeft, String posLowerLeftPointFromBottom, String width, String height, PdfFont font, Single fontSize, Color fontColor, Single strokeWidth, Color strokeColor, Color fillColor, TextAlignment alignment, String innerSpacing, Int32 placeOnPage) in D:\Documents\15 - Visual Studio Projects\iTextPDF\iTextPDF\iTextPDF.vb:Zeile 1360.
bei iTextPDFTest.Form1.Button1_Click(Object sender, EventArgs e) in D:\Documents\15 - Visual Studio Projects\iTextPDFTest\iTextPDFTest\Form1.vb:Zeile 225.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.PerformClick()
bei iTextPDFTest.Form1.Form1_Load(Object sender, EventArgs e) in D:\Documents\15 - Visual Studio Projects\iTextPDFTest\iTextPDFTest\Form1.vb:Zeile 9.
bei System.EventHandler.Invoke(Object sender, EventArgs e)
bei System.Windows.Forms.Form.OnLoad(EventArgs e)
bei System.Windows.Forms.Form.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.WmShowWindow(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.Form.WmShowWindow(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
【问题讨论】:
-
“我不知道哪个对象是 NULL” 请显示错误的堆栈跟踪。但是,有可能还需要有问题的 pdf 和足够的代码来重现错误。
-
我在问题中添加了 StackTrace...(评论太长了)
-
A
NullReferenceException听起来页面字典对象在发生这种情况时已经被释放。 iText 通常会尝试尽早刷新生成的页面以输出,然后释放它们的数据。可能您的代码在将该表添加到第 1 页之前触发了该刷新?为了更好地分析这一点,需要更多的代码。 -
是的,这就是原因。我尝试在 PDF 文档生成的最后将表格添加到第一页。该文档最终有 5 页,就在 doc.close 之前,我想将表格添加到第 1 页。所以这不可能吗?那么打开一个现有文档并在第一页添加一个表格呢?