LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

用C#提取PDF文件中的表格并导出为HTML格式页面

admin
2025年8月4日 13:18 本文热度 50

在C#中提取PDF表格并转换为HTML,推荐使用开源库iTextSharp(针对结构化PDF)和PdfPig(针对复杂布局)。以下是两种实现方案:

方案1:使用iTextSharp(推荐格式良好的PDF)

// 安装NuGet包:Install-Package iTextSharp

using iTextSharp.text.pdf;

using iTextSharp.text.pdf.parser;

using System.Text;

using System.IO;


public class PdfTableExtractor

{

    public static string ExtractTableToHtml(string pdfPath)

    {

        var html = new StringBuilder();

        html.AppendLine("<table border='1'>");


        using (var reader = new PdfReader(pdfPath))

        {

            for (int page = 1; page <= reader.NumberOfPages; page++)

            {

                var strategy = new SimpleTextExtractionStrategy();

                string text = PdfTextExtractor.GetTextFromPage(reader, page, strategy);


                // 简单示例:按行分割(实际需更复杂解析)

                foreach (var line in text.Split('\n'))

                {

                    if (line.Contains("|")) // 假设表格使用竖线分隔

                    {

                        html.AppendLine("<tr>");

                        foreach (var cell in line.Split('|'))

                        {

                            html.AppendLine($"<td>{cell.Trim()}</td>");

                        }

                        html.AppendLine("</tr>");

                    }

                }

            }

        }


        html.AppendLine("</table>");

        return html.ToString();

    }

}


// 使用示例

string htmlTable = PdfTableExtractor.ExtractTableToHtml("input.pdf");

File.WriteAllText("output.html", htmlTable);

注意:此方案仅适用于结构简单的PDF表格。复杂表格需使用LocationTextExtractionStrategy解析坐标。

方案2:使用PdfPig(处理复杂布局)

// 安装NuGet包:Install-Package PdfPig

using UglyToad.PdfPig;

using System.Text;

using System.Collections.Generic;


public class PdfPigTableExtractor

{

    public static string ExtractTables(string pdfPath)

    {

        var html = new StringBuilder();

        html.AppendLine("<table border='1' style='border-collapse:collapse'>");


        using (var document = PdfDocument.Open(pdfPath))

        {

            foreach (var page in document.GetPages())

            {

                var words = page.GetWords();

                var lines = GroupWordsIntoLines(words);


                foreach (var line in lines)

                {

                    html.AppendLine("<tr>");

                    foreach (var word in line)

                    {

                        html.Append($"<td>{word.Text}</td>");

                    }

                    html.AppendLine("</tr>");

                }

            }

        }


        html.AppendLine("</table>");

        return html.ToString();

    }


    private static List<List<Word>> GroupWordsIntoLines(IEnumerable<Word> words)

    {

        // 按Y坐标分组(同一行)

        var grouped = new Dictionary<double, List<Word>>();

        foreach (var word in words)

        {

            var y = Math.Round(word.BoundingBox.Bottom, 1);

            if (!grouped.ContainsKey(y)) grouped[y] = new List<Word>();

            grouped[y].Add(word);

        }


        // 按行排序(从上到下)

        return grouped.OrderByDescending(g => g.Key)

                      .Select(g => g.Value.OrderBy(w => w.BoundingBox.Left).ToList())

                      .ToList();

    }

}


// 使用示例

string html = PdfPigTableExtractor.ExtractTables("input.pdf");

File.WriteAllText("table.html", html);

处理复杂表格的改进建议

  1. 列检测:统计单词X坐标聚类,自动识别列边界

  2. 单元格合并:通过空白区域检测跨行/跨列单元格

  3. 使用专用库

示例HTML输出结构

<table border='1'>

  <tr>

    <td>Header 1</td>

    <td>Header 2</td>

  </tr>

  <tr>

    <td>Row 1 Cell 1</td>

    <td>Row 1 Cell 2</td>

  </tr>

</table>

提示:对于生产环境,建议结合PDF解析库(提取原始数据)+ HTML生成库(如HtmlAgilityPack)构建更健壮的解决方案。复杂PDF可能需要OCR预处理。


该文章在 2025/8/4 14:42:03 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved