首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iTextSharp PdfPtable多页

iTextSharp PdfPtable多页
EN

Stack Overflow用户
提问于 2013-08-19 12:02:12
回答 1查看 6.6K关注 0票数 1

我是iTextSharp新手,我想把我的DataGridView转换成PdfPtable。

当我将表写入PDF时,它会很好地显示出来,除非列的数量相对较大。然后,通过使列宽度变小来容纳。

相反,我想从一个新的页面开始,显示更多的表格和标题。

下面是表的代码:

代码语言:javascript
复制
  PdfPTable table = new PdfPTable( view.Columns.Count );

  float[] widths = new float[view.Columns.Count];

  for ( int i = 0; i < view.Columns.Count; i++ ) {
    widths[i] = view.Columns[i].Width;
  }

  table.SetWidths( widths );
  table.HorizontalAlignment = 1; //Center

  PdfPCell cell = null;

  //Headers
  foreach ( DataGridViewColumn c in view.Columns ) {
    cell = new PdfPCell( new Phrase( new Chunk( c.HeaderText, _standardFont ) ) );
    cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
    cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;
    table.AddCell( cell );
  }

  //Rest of table
  for ( int i = 1; i < view.Rows.Count; i++ ) {
    for ( int j = 0; j < view.Columns.Count; j++ ) {
      bool hasValue = view.Rows[i].Cells[j].Value == null ? false : true;

      if ( hasValue ) {
        cell = new PdfPCell( new Phrase( view.Rows[i].Cells[j].Value.ToString(), _standardFont ) );
      } else {
        cell = new PdfPCell( new Phrase( "", _standardFont ) );
      }
      cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
      cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;
      table.AddCell( cell );
    }
  }

一种解决方案是知道一页上可以打印多少列,然后添加一个新页面,其中显示了更多的网格,但我不确定如何检测一个新页面。这里的问题是,似乎没有办法改变PdfPtable的列数,所以我必须能够在预先添加列时计算宽度的影响。

编辑:我想垂直分割页面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-19 13:22:06

你面临的问题是PDF不是HTML。PDF中的页面有固定的大小。您没有滚动条,当您调整查看器窗口的大小时,内容不会改变。

我将使用我的书第4章中的JAVA示例来回答。如果您需要这些示例的C#版本,您将需要以下URL:http://tinyurl.com/itextsharpIIA2C04

首先,一张桌子看上去是否好看是机器无法判断的。这是人类才能做的事。

似乎你想要控制列的宽度。示例ColumnWidths给出了一些如何做到这一点的示例。在这种情况下,您应该使用一个解决方案,该解决方案涉及对表的宽度使用绝对值。您将认识到这些解决方案,因为它们都有以下共同点:

代码语言:javascript
复制
table.setLockedWidth(true);

如果要计算每一行或整个表的高度,则必须使用绝对宽度。一个常见的问题是:“我创建了一个表,当我问它的总宽度时,它返回零。”它可以用一个反问题来回答:“如果您没有首先定义宽度,那么iText如何计算表的高度?”这是一个反问句:在确定宽度之前不可能计算出高度。如TableHeight示例所示。

一旦定义了表的宽度(及其列),就可以计算高度,并准备将表定位在绝对位置。张某示例显示了它是如何完成的。在本例中,创建了一个包含4列的表。前两列使用此突击队绘制:

代码语言:javascript
复制
table.writeSelectedRows(0, 2, 0, -1, 236, 806, canvas);

其中,第一个0定义需要绘制的第一个列,而2定义第一个未绘制的列。其余的列将在下一页中绘制,使用此命令:

代码语言:javascript
复制
table.writeSelectedRows(2, -1, 0, -1, 36, 806, canvas);

其中,2定义了需要绘制的第一个列,而-1表示应该绘制所有剩余的列。

在本例中,行使用0-1。如果您的表包含的行数比适合的多,则必须进行计算,以确保没有任何“从页面上掉下来”的行。

注意,36806表示X和Y坐标。当您控制布局时,您负责计算这些坐标。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18313320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档