欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

在 C# .NET 中使用開源 Tabula 庫從 PDF 中提取表數(shù)據(jù)

admin
2024年4月17日 13:59 本文熱度 1150
 

PDF 文檔是一種無處不在的文件格式,用于以固定布局表示結(jié)構(gòu)化文檔。但是,該格式本身不支持提取語義信息,如表格、圖像、文本等。這給以編程方式分析 PDF 文檔或?qū)⑵滢D(zhuǎn)換為其他格式(如 Excel)等任務(wù)帶來了挑戰(zhàn)。

在這篇博文中,我們將探討如何使用 C# 構(gòu)建將 PDF 文檔中的表格數(shù)據(jù)直接提取為 .NET DataTable 等格式的能力。從 PDF 中提取表格數(shù)據(jù)使我們能夠有效地理解、分析和處理 PDF 表格中包含的結(jié)構(gòu)化信息。

了解 PDF 表格結(jié)構(gòu)

在我們深入研究代碼之前,了解 PDF 格式表格的底層結(jié)構(gòu)非常重要。PDF 文檔使用一系列繪圖命令來表示可視內(nèi)容,這些命令將文本、線條和形狀呈現(xiàn)到虛擬“頁面”上。

PDF 中的表格呈現(xiàn)為這些繪圖基元的集合,沒有固有的邏輯分組或語義含義。它們只是在表格布局中呈現(xiàn)的矩形形狀、線條和文本。

為了以編程方式提取表數(shù)據(jù),我們需要分析可視化布局并識(shí)別指示表結(jié)構(gòu)的常見模式,例如:

  • 由線條形成的矩形“細(xì)胞”

  • 重復(fù)行/列模式

  • 在單元格內(nèi)從左到右或從上到下排列的文本

  • 對(duì)齊方式和間距表明采用表格結(jié)構(gòu)

大多數(shù) PDF 提取庫都提供了分析這些視覺提示的工具,并通過檢測(cè)繪圖命令中的常見表格模式來識(shí)別基礎(chǔ)表。

使用 Tabula 提取表

在這篇博文中,我們將使用開源 Tabula 庫從 C# 中的 PDF 中提取表格數(shù)據(jù)。Tabula 是一個(gè)流行的 Java 庫,適用于基本的表提取任務(wù)。

要從 C# 使用它,我們可以添加對(duì)它所依賴的 Tabula 和 Apache PDFBox 的引用。PDFBox 提供低級(jí) PDF 解析和渲染功能。

// Add NuGet references

PM> Install-Package Tabula

PM> Install-Package PDFBox

通過引用的庫,我們現(xiàn)在可以編寫代碼從示例 PDF 文件中提取表數(shù)據(jù):

// Load PDF document

PDFDocument pdf = new PDFDocument("sample.pdf");

// Extract all tables

IList<Table> tables = TableExtractor.Extract(pdf);

// Print extracted table data

foreach (Table table in tables)

{

  Console.WriteLine(table.Extract().ToString());

}

TableExtractor 類處理 PDF 可視化效果的分析并識(shí)別表結(jié)構(gòu)。它返回提取的表,其中包含組織成行和列的單元格文本值。

我們可以遍歷提取的表格并打印或進(jìn)一步處理表格數(shù)據(jù)。這提供了一種在 .NET 中以編程方式解析 PDF 中的表的簡單方法。

處理復(fù)雜的 PDF 表格

雖然在許多情況下很簡單,但 Tabula 可能會(huì)遇到更復(fù)雜的 PDF 表格布局,其中包含合并單元格、跨行/列、嵌套標(biāo)題等。為了處理這些問題,我們需要一個(gè)更強(qiáng)大的 PDF 提取庫。

一種選擇是使用 PDFClown,這是一個(gè)用于高級(jí) PDF 解析和呈現(xiàn)的開源 .NET 庫。它提供了非常低級(jí)的訪問來解析整個(gè) PDF 內(nèi)容結(jié)構(gòu)并構(gòu)造 DOM 表示。

我們可以在 PDFClown 之上編寫自定義邏輯來識(shí)別復(fù)雜的表格模式,并從可視化內(nèi)容繪制命令中重建表格結(jié)構(gòu)。

下面是一個(gè)示例方法:

// Parse PDF and get page content   

PdfDocument pdf = PdfReader.Open("sample.pdf");  

PdfPage page = pdf.Pages[0];  

// Iterate content objects  

foreach(var obj in page.Content.Elements)  

{  

   if(obj is PdfText)  

   {  

      // Analyze text object positions  

      // Detect table cell texts  

   }  

   if(obj is PdfLine)    

   {  

      // Analyze line positions   

      // Detect cell borders  

   }  

   // Reconstruct table structure  

   // Handle complex patterns  

}  

// Return extracted complex table  

Table table = BuildTable();

我們遍歷每個(gè)內(nèi)容元素,分析位置和大小鄰居等屬性,以了解視覺布局。然后,復(fù)雜表邏輯根據(jù)可視化渲染中檢測(cè)到的模式重建底層數(shù)據(jù)結(jié)構(gòu)。

這允許通過分析原始 PDF 內(nèi)容基元來處理任何類型的復(fù)雜表格結(jié)構(gòu)。

最后的話

在這篇博客文章中,我們介紹了 .NET 開發(fā)人員如何使用 C# 以編程方式從 PDF 文檔中提取表格數(shù)據(jù)。我們研究了 PDF 格式表格的底層結(jié)構(gòu)以及用于直觀識(shí)別表格的一些常見模式。

我們演示了一種使用 Tabula 庫的簡單提取方法,以及使用 PDFClown 的低級(jí) PDF 解析功能的更高級(jí)技術(shù)。能夠從 PDF 中理解和提取表格等結(jié)構(gòu)化數(shù)據(jù),為進(jìn)一步處理和分析 PDF 文檔提供了許多可能性。

所示技術(shù)對(duì)于 ASP.NET 開發(fā)人員在其 .NET 應(yīng)用程序中處理 PDF 文件非常有用。通過利用 Tabula 和 PDFClown 等 C# 庫,開發(fā)人員可以更輕松地從 PDF 中提取表格和其他結(jié)構(gòu)化數(shù)據(jù),以便進(jìn)行額外處理并集成到他們的應(yīng)用程序中。


該文章在 2024/4/17 17:21:51 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved