【问题标题】:itext7 table SetFixedPosition on Page 1 fails第 1 页上的 itext7 表 SetFixedPosition 失败
【发布时间】: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 页。所以这不可能吗?那么打开一个现有文档并在第一页添加一个表格呢?

标签: itext itext7


【解决方案1】:

这是一个很好的提示。我在创建“Document”时将“immediateFlush”设置为 false。然后页面保持“可编辑”状态,我无法将表格粘贴到第一页。

【讨论】:

  • 但现在我在第一个问题之后还有另一个问题:我使用此代码 sn-p 打开现有 PDF: reader = New PdfReader(filenameSource) writer = New PdfWriter(destFile) /// pdf = New PdfDocument(reader, writer) /// doc = New Document(pdf, pdf.GetDefaultPageSize, False) 我现在可以通过 @987654322 添加段落@ 但是当我尝试使用 table.setFixedPosition(...) 放置表格时,表格不会显示在页面上。
  • "immediateFlush" - 是的,这就是我现在提出的建议。 “但现在我有另一个问题” - 请提出一个实际的新堆栈溢出问题。
猜你喜欢
  • 2020-06-15
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多