【问题标题】:C# PDF table add row in wrong positionC# PDF表格在错误的位置添加行
【发布时间】:2021-01-24 20:18:13
【问题描述】:

[由于对答案的误解而编辑]

我正在用 C# 编写一个简单的程序,使用 iText7 创建 PDF 文件。 在此 PDF 中,我添加了一个表格,其第一个单元格从文件中的某个位置开始。

我不知道我是否正确设置了位置,但是每次我使用tab.StartNewRow() 添加另一个单元格时,生成的新表都会重新定位,将最后一个单元格作为位置参考,将之前添加的单元格从该点开始向上,而我想从该点向下添加单元格。

我应该使用哪种方法?那是我的代码: 以前我使用tab1.SetFixedPosition(20, heigh, width);设置第一个表格单元格的位置

然后,为了添加其他单元格:

if (mylistbox.Items.Count > 0)
  {
     tab1.AddCell("FIRST CELL");
     tab1.StartNewRow();
     for (int i = 0; i < mylistbox.Items.Count; i++)
        {
          tab1.AddCell(mylistbox.Items[i].ToString());
          tab1.StartNewRow();
        }
        doc.Add(tab1);
  }

[EDIT #2] 为了更好地解释我的问题

我必须放置 5 个表格,这些表格必须从某个点向下增长,在文档中以相同的距离、相同的高度和宽度放置。这张图片解释了它应该如何产生:

【问题讨论】:

  • 这确实是SetFixedPosition 所做的,它被记录为指定的坐标对应于元素的左下角并向上增长。
  • so....你知道一种方法,它以表格顶部为参考并使其向下增长吗?
  • false,它不起作用。它将下一个表放在上一个表之下,因为它计算相对于上一个项目的位置
  • 您是否考虑过在有问题的页面上创建一个Canvas,按照您的需要设置左边距、上边距和右边距,并且底部足够远以允许任何预期的表格大小,然后添加没有SetFixedPosition 的表到那个Canvas
  • 您的意思是为每个表格创建不同的画布,然后将其添加到具有不同位置的文档中?那么,例如,如果我有 5 个表,我必须使用 5 个画布?

标签: c# winforms itext windows-forms-designer itext7


【解决方案1】:

在 WPF 应用程序中,我有一个 ListBox,其中包含 5 个项目,编号为 1 到 5。这应该与 WinForms 非常相似。

CreatePercentArray 的大小等于一行中的列数。

一篇关于表格的有趣文章:link

  private void CreateListBoxTable(Document pdfDoc)
        {
            // Create an array where each item has an equal width, and use the entire pdf width
            // The CreatePercentArray takes a size which is equal to the amount of columns in a row
            // By using percentages, they will automatically adapt
            // Use CreatePointArray for exacter measurements
            var table = new Table(UnitValue.CreatePercentArray(2)).UseAllAvailableWidth();

            if (!MyListBox.Items.IsEmpty)
            {
                foreach (var listBoxItem in MyListBox.Items)
                {
                    table.AddCell(((ListBoxItem) listBoxItem).Content.ToString());
                }
            }
            // Adds table to document
            pdfDoc.Add(table);
            // Closes document
            pdfDoc.Close();
        }

【讨论】:

  • 感谢您的回答,但我解释的很糟糕,这是我的错,我不确定您是否理解我的问题。无论如何,我会试试你的方法,如果你能再次阅读我的问题,我会很高兴。非常感谢!!
  • 您好,我尝试使用不带 SetFixedPosition 的确切代码并使用只有 1 列的表。即使在程序运行时以您的方式添加项目也不会影响我的桌子的位置,它只是垂直和向下添加项目。第一项添加在顶部,最后一项添加在底部。我仍然不知道您的确切问题是什么以及它是如何发生的。
  • 这样做当然可以,但是我想把表格放在文档中的某个位置。所以不使用 SetFixedPosition 问题就解决了,但是表格是随机定位的
  • 我需要一种方法将表格的第一个单元格放在自定义位置,同时让它向下增长
  • 您好,我编辑了我的问题,改进了我的问题解释并画了一个平局以更好地解释它应该如何产生,感谢您的耐心@Mayfair
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多