提取PDF数据:Documents for PDF ( GcPdf )

这篇具有很好参考价值的文章主要介绍了提取PDF数据:Documents for PDF ( GcPdf )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在当今数据驱动的世界中,从 PDF 文档中无缝提取结构化表格数据已成为开发人员的一项关键任务。借助GrapeCity Documents for PDF ( GcPdf ),您可以使用 C# 以编程方式轻松解锁这些 PDF 中隐藏的信息宝藏。

考虑一下 PDF(最常用的文档格式之一)的流行程度,以及它的表格中可以包含的大量数据。公司和组织一直在使用 PDF 文档来查看财务分析、股票趋势、联系方式等。现在,想象一下多年来检查季度报告的情况,其中数据的积累占据了中心位置。

从这些报告中获取数据最初看起来可能很容易(复制/粘贴)。尽管如此,由于 PDF 文件的结构,简单的复制和粘贴无需大量操作和修改即可获得表格数据的情况很少见。 

再加上从许多其他文档复制和粘贴的可能性,这是一个漫长的一天(甚至一周或更长时间,取决于所需数据!)的秘诀。有效地处理此类需求需要一个能够自动执行此过程的工具,而 C# .NET GcPdf API 库是完成这项工作的完美工具!

本文适用于希望减少收集数据所需时间并提高数据收集过程准确性的开发人员。这些示例将帮助开发人员了解 GcPdf 工具,以便访问 PDF 文件中的表格并提取表格数据以便根据需要导出为 CSV 文件或其他格式(例如 XLSX)。

有关 PDF 文档中表格的重要信息

表格与 PDF 文件格式非常相似,是一种几乎流行的数据呈现方式。尽管如此,有必要了解 PDF 文档本质上缺乏表格的概念。换句话说,您在 PDF 中看到的表格纯粹是视觉元素。

这些 PDF“表格”与我们在 MS Excel 或 MS Word 等应用程序中常见的表格不同。相反,它们是通过负责在特定位置渲染文本和图形的运算符组合来构造的,类似于表格结构。

这意味着行、列和单元格的传统概念对于 PDF 文件来说是陌生的,没有底层代码组件来帮助识别这些元素。那么,让我们深入研究一下 GcPdf 的 C# API 库如何帮助我们实现这一任务!

如何使用 C# 以编程方式从 PDF 文档中提取表格数据

  1. 创建包含 GcPdf 的 .NET Core 控制台应用程序
  2. 加载包含数据表的示例 PDF
  3. 定义表识别参数
  4. 获取表数据
  5. 将提取的 PDF 表数据保存到另一种文件类型 (CSV)
  6. 奖励:将导出的 PDF 表格数据格式化为 Excel (XLSX) 文件

请务必下载示例应用程序 并尝试本博客文章中描述的用例场景和代码片段的详细实现。

创建包含 GcPdf 的 .NET Core 控制台应用程序

创建 .NET Core 控制台应用程序,右键单击“依赖项”,然后选择“管理 NuGet 包”。在“浏览”选项卡下,搜索“GrapeCity.Documents.Pdf”并单击“安装”。

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf

安装时,您将收到“许可证接受”对话框。单击“我接受”继续。

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf

在程序文件中,导入以下命名空间:

using System.Text;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Recognition;
using System.Linq;

加载包含数据表的示例 PDF

通过初始化GcPdfDocument 构造函数来加载将要解析的 PDF 文档来创建新的 PDF 文档。调用 GcPdfDocument 的 Load 方法来加载包含数据表的原始 PDF 文档。

using (var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "zugferd-invoice.pdf")))
{
    // Initialize GcPdf
    var pdfDoc= new GcPdfDocument();
    // Load a PDF document
    pdfDoc.Load(fs);
}

在此示例中,我们将使用此 PDF:

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf

定义表识别参数

实例化RectangleF 类的新实例并定义 PDF 文档中的表格边界。

const float DPI = 72;
using (var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "zugferd-invoice.pdf")))
{
    // Initialize GcPdf
    var pdfDoc= new GcPdfDocument();
    // Load a PDF document
    pdfDoc.Load(fs);
    
    // The approx table bounds:
    var tableBounds = new RectangleF(0, 2.5f * DPI, 8.5f * DPI, 3.75f * DPI);
}

为了帮助在定义的参数内识别表格,我们使用TableExtractOptions类,允许我们微调表格识别,考虑表格格式的特性。TableExtractOptions 是一个参数,用于指定表格式选项,例如列宽、行高以及行或列之间的距离。

// TableExtractOptions allow to fine-tune table recognition accounting for
// specifics of the table formatting:
var tableExtrctOpt = new TableExtractOptions();
var GetMinimumDistanceBetweenRows = tableExtrctOpt.GetMinimumDistanceBetweenRows;

// In this particular case, we slightly increase the minimum distance between rows
// to make sure cells with wrapped text are not mistaken for two cells:
tableExtrctOpt.GetMinimumDistanceBetweenRows = (list) =>
{
    var res = GetMinimumDistanceBetweenRows(list);
    return res * 1.2f;
};

获取 PDF 的表格数据

创建一个列表来保存 PDF 页面中的表格数据。

// CSV: list to keep table data from all pages:
var data = new List<List<string>>();

使用 定义的表边界(在上一步中定义)调用GetTable 方法,以使 GcPdf 搜索指定矩形内的表。

for (int i = 0; i < pdfDoc.Pages.Count; ++i)
{
  // Get the table at the specified bounds:
  var itable = pdfDoc.Pages[i].GetTable(tableBounds, tableExtrctOpt);
}

使用ITable.GetCell(rowIndex, colIndex) 方法访问表中的每个单元格。使用 Rows.Count 和 Cols.Count 属性循环访问提取的表格单元格。

for (int i = 0; i < pdfDoc.Pages.Count; ++i)
{
  // Get the table at the specified bounds:
  var itable = pdfDoc.Pages[i].GetTable(tableBounds, tableExtrctOpt);
  if (itable != null)
  {
    for (int row = 0; row < itable.Rows.Count; ++row)
    {
      // CSV: add next data row ignoring headers:
      if (row > 0)
        data.Add(new List<string>());

      for (int col = 0; col < itable.Cols.Count; ++col)
      {
        var cell = itable.GetCell(row, col);
        if (cell == null && row > 0)
          data.Last().Add("");
        else
        {
          if (cell != null && row > 0)
            data.Last().Add($"\"{cell.Text}\"");
       }
      }
    }
  }
}

将提取的 PDF 表数据保存到另一种文件类型 (CSV)

对于此步骤,我们必须首先添加对“System.Text.Encoding.CodePages”NuGet 包引用的引用。

然后,为了保存上一步中从变量中提取的 PDF 表数据,我们将使用 File 类 并调用其 AppendAllLines 方法。

for (int i = 0; i < pdfDoc.Pages.Count; ++i)
{
   // Get the table at the specified bounds:
    var itable = pdfDoc.Pages[i].GetTable(tableBounds, tableExtrctOpt);
    if (itable != null)
    {
      for (int row = 0; row < itable.Rows.Count; ++row)
      {
       // CSV: add next data row ignoring headers:
        if (row > 0)
           data.Add(new List<string>());
        for (int col = 0; col < itable.Cols.Count; ++col)
        {
          var cell = itable.GetCell(row, col);
          if (cell == null && row > 0)
            data.Last().Add("");
          else
          {
           if (cell != null && row > 0)
            data.Last().Add($"\"{cell.Text}\"");
          }
        } 
     }
  }
}

数据现在将以 CSV 文件形式提供:

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf原版PDF

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf在 CSV 文件中提取 PDF 表数据

奖励:将导出的 PDF 表格数据格式化为 Excel (XLSX) 文件

尽管数据现在以易于读取和操作的格式提供,但它是以 CSV 文件格式的原始格式保存的。为了更好地利用数据并使分析更容易进行,请使用 GrapeCity Documents for Excel (GcExcel) .NET 版本和 C# 将 CSV 文件加载到 Excel (XLSX) 文件中,并对提取的数据应用样式和格式。 

要使用 GcExcel,请将NuGet 包“GrapeCity.Documents.Excel”添加到项目中并添加其命名空间。

using GrapeCity.Documents.Excel;

初始化 GcExcel 工作簿实例并使用Open方法加载 CSV 文件。

 var workbook = new GrapeCity.Documents.Excel.Workbook();
 workbook.Open($@"{fileName}", OpenFileFormat.Csv);

获取提取数据的范围并包装单元格范围,对列应用自动调整大小,并应用带条件背景颜色的样式。

IWorksheet worksheet = workbook.Worksheets[0];
IRange range = worksheet.Range["A2:E10"];

// wrapping cell content
range.WrapText = true;

// styling column names 
worksheet.Range["A1"].EntireRow.Font.Bold = true;

// auto-sizing range
worksheet.Range["A1:E10"].AutoFit();

// aligning cell content
worksheet.Range["A1:E10"].HorizontalAlignment = HorizontalAlignment.Center;
worksheet.Range["A1:E10"].VerticalAlignment = VerticalAlignment.Center;

// applying conditional format on UnitPrice
IColorScale twoColorScaleRule = worksheet.Range["E2:E10"].FormatConditions.AddColorScale(ColorScaleType.TwoColorScale);

twoColorScaleRule.ColorScaleCriteria[0].Type = ConditionValueTypes.LowestValue;
twoColorScaleRule.ColorScaleCriteria[0].FormatColor.Color = Color.FromArgb(255, 229, 229);

twoColorScaleRule.ColorScaleCriteria[1].Type = ConditionValueTypes.HighestValue;
twoColorScaleRule.ColorScaleCriteria[1].FormatColor.Color = Color.FromArgb(255, 20, 20);

Thread.Sleep(1000);                

最后,使用Save方法将工作簿保存为 Excel 文件:

workbook.Save("ExtractedData_Formatted.xlsx");

如您所见,使用 C# 和 GcPdf,开发人员可以以编程方式将 PDF 表格数据提取到另一个文件(如 CSV),然后使用 GcExcel,可以将数据转换为风格化和格式化的 Excel XLSX 文件,以便于数据分析:

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf原版PDF

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf在 CSV 文件中提取 PDF 表数据

提取PDF数据:Documents for PDF ( GcPdf ),Gcexcel,GcPdf格式化 Excel XLSX 文件

GrapeCity 的 .NET PDF API 库

将此 .NET PDF 服务器端 API 集成到桌面或基于 Web 的应用程序中,使开发人员能够完全控制 PDF - 快速生成文档、提高内存效率且无依赖性。文章来源地址https://www.toymoban.com/news/detail-729559.html

到了这里,关于提取PDF数据:Documents for PDF ( GcPdf )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java使用Documents4j实现Word转PDF(知识点+案例)

    博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。 博主所有博客文件目录索引:博客目录索引(持续更新) 视频平台:

    2024年02月20日
    浏览(31)
  • GrapeCity Documents for Excel, Java Edition Crack

    增加了对SpreadJS.sjs文件格式的支持: 更快地将大型Microsoft Excel文件转换为.sjs格式。 使用较小的占用空间保存导出的文件。 将Excel/SpreadJS功能导入SpreadJS/从SpreadJS导出。 从.sjs文件中压缩的JSON文件生成一个JSON字符串。 使用各种可用选项自定义打开和保存SpreadJS.sjs文件。 在导

    2024年02月13日
    浏览(28)
  • GcWord 6.1.4 Crack -GrapeCity Documents for Word

    用于 Microsoft Word 文档的 .NET 6 API 通过代码完全控制您的 Word 文档,而不依赖于 Microsoft Word。 生成、加载、编辑和保存 Word 文档 基于 Microsoft Office API 的功能丰富的对象模型 从头开始或使用生成报告 报告模板 兼容多种平台,例如 Windows、macOS 和 Linux 部署到 Azure 和 AWS   概述

    2024年02月11日
    浏览(30)
  • 论文阅读《Nougat:Neural Optical Understanding for Academic Documents》

    科学知识主要存储在书籍和科学期刊中,通常以PDF的形式。然而PDF格式会导致语义信息的损失,特别是对于数学表达式。我们提出了Nougat,这是一种视觉transformer模型,它执行OCR任务,用于将科学文档处理成标记语言,并证明了我们的模型在新的科学文档数据集上的有效性。

    2024年02月09日
    浏览(38)
  • Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j

    博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。 博主所有博客文件目录索引:博客目录索引(持续更新) 视频平台:

    2024年02月20日
    浏览(59)
  • 6.2.0在线编辑:GrapeCity Documents for Word (GcWord) Crack

    支持 Office Math 函数以及转换为 MathML GcWord 现在支持在 Word 文档中创建和编辑 Office Math 内容。GcWord 中的 OMath 支持包括完整的 API,可处理科学、数学和通用 Word 文档中广泛使用的数学符号、公式和方程。以下是通过 OMath 支持引入的新 API 的主要亮点 - 用于在 GcWord 中表示 Offi

    2024年02月13日
    浏览(26)
  • 通过Python的pdfplumber库提取pdf中表格数据

    大家好,我是空空star,本篇给大家分享一下 《通过Python的pdfplumber库提取pdf中表格数据》 。 pdfplumber是一个用于从PDF文档中提取文本和表格数据的Python库。它可以帮助用户轻松地从PDF文件中提取有用的信息,例如表格、文本、元数据等。pdfplumber库的特点包括:简单易用、速度

    2024年02月06日
    浏览(33)
  • java 将word转为pdf文件的两种方式【spire.doc.free】【documents4j】

    如资产证明等场景下,一般要求同时生成word与pdf两种格式的证明文件,且两者格式需保持一致,可以各自单独生成,但那样可能需要维护两个模板文件,所以也可以仅定义一份word的模板文件,使用模板生成word文件,再将word转换为pdf,这样不仅少维护一个模板,也可以保证

    2024年02月12日
    浏览(47)
  • 使用gradio创建一个提取pdf、excel中表格数据的demo

    在线体验地址 (https://swanhub.co/patch/TabularScan/demo) 大家可以在上面的链接中试用,需求不大也不用自己弄代码了。 后续大家如果有一些代码或功能想快速部署、提供服务,不管是 AI 项目或是 web 项目,也可以直接托管在 swanhub开源社区 上,方便快捷,而且免费 最近需要对pdf、

    2024年02月09日
    浏览(42)
  • PDF提取 PDF截取

    想截取一个pdf的前两页,TMD WPS还收费,这能难住一个程序员? 于是用python 搞了个小工具,分分钟解决问题。看到这篇文章的不管是不是程序员,只要有这个需求都可以联系我,免费帮大家解决有关PDF的问题。wx: yrn1840

    2024年02月09日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包