You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET环境下使用iText 7如何定义Cell的Colspan与Rowspan?

在iText 7中实现PDF表格的Colspan和Rowspan(主标题-子标题结构)

嘿,我来帮你搞定iText 7里的单元格合并问题!其实iText 7的Cell类原生就支持 colspan 和 rowspan 功能,分别通过SetColspan(int)和SetRowspan(int)方法就能实现,完全能满足你要做的主标题+子标题的表格结构需求。

核心方法说明

  • SetColspan(int numColumns): 设置单元格横跨的列数,比如主标题要占3列,就传3
  • SetRowspan(int numRows): 设置单元格纵跨的行数,适合需要垂直合并的场景

结合你的代码实现示例

我帮你补充完整导出PDF的代码,加入带合并单元格的表格部分,刚好对应你的主标题-子标题需求:

using iText.IO.Font.Constants;
using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using Microsoft.Win32;
using System.Diagnostics;
using System.Windows;

namespace ITextPdf.UI
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Export_Btn(object sender, RoutedEventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog
            {
                DefaultExt = ".pdf",
                Filter = "Adobe PDF Files(*.pdf)|*.pdf",
                FilterIndex = 1
            };
            string fileName = string.Empty;
            if (dlg.ShowDialog() == true)
            {
                fileName = dlg.FileName;
                PdfWriter writer = new PdfWriter(fileName);
                PdfDocument pdf = new PdfDocument(writer);
                PdfFont font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
                PdfFont bold = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);
                Document document = new Document(pdf, PageSize.LETTER);
                document.SetMargins(20, 20, 20, 20);

                // 添加标题
                document.Add(new Paragraph("General Ledger")
                    .SetTextAlignment(TextAlignment.CENTER)
                    .SetFontSize(18)
                    .SetFont(bold)
                    .SetMarginBottom(-8));
                document.Add(new Paragraph("Naawan, Misamis Oriental")
                    .SetTextAlignment(TextAlignment.CENTER)
                    .SetFontSize(12)
                    .SetFont(font)
                    .SetMarginBottom(20));

                // 创建表格,假设我们需要3列,设置宽度比例
                Table table = new Table(UnitValue.CreatePercentArray(new float[] { 40, 30, 30 }))
                    .SetWidth(UnitValue.CreatePercentValue(100));

                // 主标题单元格:横跨3列(两种写法都支持:直接传参数或用SetColspan)
                Cell mainHeader = new Cell(1, 3)
                    .Add(new Paragraph("Transaction Details")
                        .SetFont(bold)
                        .SetFontSize(14)
                        .SetTextAlignment(TextAlignment.CENTER))
                    .SetBackgroundColor(new iText.Kernel.Colors.DeviceGray(0.9f));
                table.AddCell(mainHeader);

                // 子标题行
                table.AddCell(new Cell().Add(new Paragraph("Date").SetFont(bold)));
                table.AddCell(new Cell().Add(new Paragraph("Description").SetFont(bold)));
                table.AddCell(new Cell().Add(new Paragraph("Amount").SetFont(bold)));

                // 示例数据行
                table.AddCell(new Cell().Add(new Paragraph("2024-05-01").SetFont(font)));
                table.AddCell(new Cell().Add(new Paragraph("Office Supplies").SetFont(font)));
                table.AddCell(new Cell().Add(new Paragraph("$150.00").SetFont(font)));

                // 跨行合并示例:垂直跨越2行的单元格
                Cell spanRowCell = new Cell().SetRowspan(2)
                    .Add(new Paragraph("Monthly Expenses").SetFont(bold))
                    .SetVerticalAlignment(VerticalAlignment.MIDDLE);
                table.AddCell(spanRowCell);
                table.AddCell(new Cell().Add(new Paragraph("Rent").SetFont(font)));
                table.AddCell(new Cell().Add(new Paragraph("$1200.00").SetFont(font)));
                table.AddCell(new Cell().Add(new Paragraph("Utilities").SetFont(font)));
                table.AddCell(new Cell().Add(new Paragraph("$250.00").SetFont(font)));

                // 将表格添加到文档
                document.Add(table);

                // 关闭文档并打开生成的PDF
                document.Close();
                Process.Start(new ProcessStartInfo(fileName) { UseShellExecute = true });
            }
        }
    }
}

代码关键点解释

  1. 表格初始化: new Table(UnitValue.CreatePercentArray(new float[] { 40, 30, 30 })) 定义了3列的宽度比例,也可以用固定宽度值来设置
  2. 主标题合并: new Cell(1, 3) 直接指定单元格的行数和列数,和new Cell().SetColspan(3)效果完全一致,选你习惯的写法就行
  3. 跨行合并: SetRowspan(2) 让单元格垂直跨越2行,搭配SetVerticalAlignment(VerticalAlignment.MIDDLE)可以让内容在合并单元格中垂直居中
  4. 样式优化: 给主标题添加浅灰色背景,能更清晰地区分主副标题的层级结构

这样生成的PDF表格就会有清晰的主标题-子标题结构,完全符合你的需求啦!

内容的提问来源于stack exchange,提问作者Ahcmad Angagao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:57:22