当前位置:网站首页>C#/VB.NET 从PDF中提取表格
C#/VB.NET 从PDF中提取表格
2022-08-03 10:56:00 【InfoQ】
程序环境:
从PDF中提取表格具体步骤:
- 实例化PdfDocument类的对象并调用PdfDocument.LoadFromFile()方法加载文档。
- 通过 PdfTableExtractor.ExtractTable(intpageIndex) 方法提取指定页面中的表格。
- 通过 PdfTable.GetText(int rowIndex, intcolumnIndex) 方法将获取具体行和列中的单元格文本内容。
- 将获取的表格内容保存为TXT文件。
完整代码:
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.IO;
using System.Text;
namespace ExtractTable
{
class Program
{
static void Main(string[] args)
{
//实例化PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//加载PDF文档
pdf.LoadFromFile("编程语言1.pdf");
//创建StringBuilder类的对象
StringBuilder builder = new StringBuilder();
//实例化PdfTableExtractor类的对象
PdfTableExtractor extractor = new PdfTableExtractor(pdf);
//声明PdfTable类的表格数组
PdfTable[] tableLists;
//遍历PDF页面
for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
{
//从页面提取表格
tableLists = extractor.ExtractTable(pageIndex);
//判断表格列表是否为空
if (tableLists != null && tableLists.Length > 0)
{
//遍历表格
foreach (PdfTable table in tableLists)
{
//获取表格中的行和列数
int row = table.GetRowCount();
int column = table.GetColumnCount();
//遍历表格行和列
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
//获取行和列中的文本
string text = table.GetText(i, j);
//写入文本到StringBuilder容器
builder.Append(text + " ");
}
builder.Append("\r\n");
}
}
}
}
//保存提取的表格内容为txt文档
File.WriteAllText("提取表格.txt", builder.ToString());
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Utilities
Imports System.IO
Imports System.Text
Namespace ExtractTable
Class Program
Private Shared Sub Main(args As String())
'实例化PdfDocument类的对象
Dim pdf As New PdfDocument()
'加载PDF文档
pdf.LoadFromFile("编程语言1.pdf")
'创建StringBuilder类的对象
Dim builder As New StringBuilder()
'实例化PdfTableExtractor类的对象
Dim extractor As New PdfTableExtractor(pdf)
'声明PdfTable类的表格数组
Dim tableLists As PdfTable()
'遍历PDF页面
For pageIndex As Integer = 0 To pdf.Pages.Count - 1
'从页面提取表格
tableLists = extractor.ExtractTable(pageIndex)
'判断表格列表是否为空
If tableLists IsNot Nothing AndAlso tableLists.Length > 0 Then
'遍历表格
For Each table As PdfTable In tableLists
'获取表格中的行和列数
Dim row As Integer = table.GetRowCount()
Dim column As Integer = table.GetColumnCount()
'遍历表格行和列
For i As Integer = 0 To row - 1
For j As Integer = 0 To column - 1
'获取行和列中的文本
Dim text As String = table.GetText(i, j)
'写入文本到StringBuilder容器
builder.Append(text & Convert.ToString(" "))
Next
builder.Append(vbCr & vbLf)
Next
Next
End If
Next
'保存提取的表格内容为txt文档
File.WriteAllText("提取表格.txt", builder.ToString())
End Sub
End Class
End Namespace
效果图
边栏推荐
- 如何通过DBeaver 连接 TDengine?
- 用于发票处理的 DocuWare,摆脱纸张和数据输入的束缚,自动处理所有收到的发票
- Apache Doris系列之:数据模型
- MATLAB Programming and Applications 2.6 Strings
- 嵌入式软件组件经典架构与存储器分类
- With strong network, China mobile to calculate excitation surging energy network construction
- 多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)
- 机器学习概述
- 【TypeScript】为什么要选择 TypeScript?
- 【网络原理的概念】
猜你喜欢
Binary search tree (search binary tree) simulation implementation (there is a recursive version)
聊天app开发——防炸麦以及节省成本的内容鉴定方法
LyScript 实现对内存堆栈扫描
训练双塔检索模型,可以不用query-doc样本了?明星机构联合发文
QT with OpenGL(HDR)
从餐桌到太空,孙宇晨的“星辰大海”
嵌入式软件组件经典架构与存储器分类
Advanced use of MySQL database
混动产品谁更吃香,看技术还是看市场?
Machine Learning (Chapter 1) - Feature Engineering
随机推荐
QT with OpenGL(Shadow Mapping)(面光源篇)
如何通过DBeaver 连接 TDengine?
error C2872: “flann”: 不明确的符号 解决方法
【二分查找详解外加递归写法】附有全部代码
面试官:工作两年了,这么简单的算法题你都不会?
二叉搜索树(搜索二叉树)模拟实现(有递归版本)
程序员架构修炼之道:如何设计出可持续演进的系统架构?
【TypeScript】为什么要选择 TypeScript?
成对连接点云分割
Guys, I have a problem: My source mysql has a table that has been writing to, I use mysql cdc connec
Web Server 设置缓存响应字段的一些推荐方案
玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据
Activiti产生的背景和作用
从餐桌到太空,孙宇晨的“星辰大海”
Depth study of 100 cases - convolution neural network (CNN) to realize the clothing image classification
GBase 8c分布式数据库,数据如何分布最优?
白帽黑客与留守儿童破壁对“画”!ISC、中国光华科技基金会、光明网携手启动数字安全元宇宙公益展
MATLAB程序设计与应用 2.7 结构数据与单元数据
混合型界面:对话式UI的未来
Pixel mobile phone system