---
# System prepended metadata

title: 'iTextSharp '
tags: [c#, iTextSharp]

---

## 環境安裝
到NuGet抓取4.1.6版 
後面的版本要權限控管比較嚴格

![](https://hackmd.io/_uploads/rk4_fXpF3.png)

## 目標
產生PDF表格有標題跟row
![](https://hackmd.io/_uploads/SJCmN7ptn.png)


## 程式

```
using System;
using System.Collections.Generic;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

internal class Program
{
    private static void Main(string[] args)
    {
        // 建立測試用的資料
        List<Row> rows = new List<Row>();
        List<Cell> cells = new List<Cell>();

        // 假設要產生 5 列 3 欄的表格
        int rowCount = 5;
        int columnCount = 3;

        // 產生亂數資料填充到 cells 陣列中
        Random random = new Random();
        for (int i = 0; i < rowCount * columnCount; i++)
        {
            cells.Add(new Cell(random.Next(100).ToString())); // 以亂數填充儲存格的值
        }

        // 根據 rows 和 cells 陣列建立資料表
        CreateTable(rows, cells, rowCount, columnCount);

        // 建立 PDF 文件
        string outputPath = "D://txt//test.PDF";
        Document document = new Document();
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputPath, FileMode.Create));
        document.Open();

        // 建立字型
        BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        Font font = new Font(baseFont, 12, Font.NORMAL);

        // 建立 PDF 表格
        PdfPTable table = new PdfPTable(columnCount);
        table.WidthPercentage = 100;

        // 加入表頭
        foreach (Cell cell in rows[0].Cells)
        {
            PdfPCell headerCell = new PdfPCell(new Phrase(cell.Value, font));
            table.AddCell(headerCell);
        }

        // 加入資料
        for (int i = 1; i < rows.Count; i++)
        {
            foreach (Cell cell in rows[i].Cells)
            {
                PdfPCell dataCell = new PdfPCell(new Phrase(cell.Value, font));
                table.AddCell(dataCell);
            }
        }

        // 將表格加入 PDF 文件
        document.Add(table);

        // 關閉文件
        document.Close();
        writer.Close();

        Console.WriteLine("PDF 文件已建立完成。");

    }
    public static void CreateTable(List<Row> rows, List<Cell> cells, int rowCount, int columnCount)
    {
        // 建立表頭
        Row headerRow = new Row();
        for (int i = 0; i < columnCount; i++)
        {
            headerRow.Cells.Add(new Cell($"Header {i + 1}"));
        }
        rows.Add(headerRow);

        // 建立資料列
        for (int i = 0; i < rowCount; i++)
        {
            Row dataRow = new Row();
            for (int j = 0; j < columnCount; j++)
            {
                int index = i * columnCount + j;
                if (index < cells.Count)
                {
                    dataRow.Cells.Add(cells[index]);
                }
            }
            rows.Add(dataRow);
        }
    }

    public class Row
    {
        public List<Cell> Cells { get; set; }

        public Row()
        {
            Cells = new List<Cell>();
        }
    }

    public class Cell
    {
        public string Value { get; set; }

        public Cell(string value)
        {
            Value = value;
        }
    }
}
```