处理PDF文件中的内容是比较麻烦的事情,特别是以表格形式呈现的各种数据。为了充分利用这些宝贵的数据资源,我们可以通过程序提取PDF文件中的表格,并将其保存为更易于处理和分析的格式,如txt、csv、xlsx,从而更方便地对表格数据进行处理、分析和可视化,加快工作效率。本文将介绍如何在.NET平台使用C#代码提取并保存PDF文件中的表格数据。
本文所使用的方法需要用到免费的Free Spire.PDF for .NET,可从官网下载或通过NuGet安装:
PM> Install-Package FreeSpire.PDF
提取PDF文件中的表格并保存为TXT和CSV文件
提取PDF表格数据主要用到的是PdfTableExtractor类,该类下的ExtractTable(int pageIndex)方法可以提取任意页的所有表格数据,并返回表格的集合。在提取到表格数据后,我们就可以将数据稍作处理并写入txt文件了。下面是操作示例:
- 创建 PdfDocument 对象并再入PDF文件。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
- 创建 PdfTableExtractor 对象。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
- 声明 PdfTable 数组.
- 遍历文档页面,从页面提取表格。
tableList = extractor.ExtractTable(pageIndex);
- 判断表格列表是否为空,如果不为空,则使用 PdfTable.GetText(int rowIndex, int columnIndex) 方法在每个表格中获取单元格中的数据并添加到StringBuilder中。
- 将处理好的数据保存到TXT文件并关闭PDF文件。
完整代码示例:
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;
namespace ExtractPdfTable
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象并加载PDF文件
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
// 创建 StringBuilder 对象
StringBuilder builder = new StringBuilder();
// 初始化 PdfTableExtractor 类的实例
PdfTableExtractor extractor = new PdfTableExtractor(doc);
// 声明 PdfTable 数组
PdfTable[]? tableList = null;
int tableCount = 1;
// 循环遍历页面
for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
{
// 从特定页面提取表格
tableList = extractor.ExtractTable(pageIndex);
// 判断表格列表是否为空
if (tableList != null && tableList.Length > 0)
{
// 遍历列表中的表格
foreach (PdfTable table in tableList)
{
// 获取特定表格的行数和列数
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 + "\t");
}
builder.Append("\r\n");
}
// 写入 .txt 文件
File.WriteAllText($"output/TXT表格/TXT表格_{tableCount}.txt", builder.ToString());
tableCount += 1;
}
}
}
doc.Close();
}
}
}
PDF文件:
保存的TXT文件:
提取PDF文件中的表格并转换为Excel和CSV表格
在提取PDF文件中的表格后,我们还可以借助Free Spire.XLS for .NET将提取的表格保存为Excel和CSV表格。Free Spire.XLS for .NET可从官网下载或通过NuGet安装:
PM> Install-Package FreeSpire.XLS
下面是操作示例:
- 创建 PdfDocument 对象并加载示例PDF文件。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
- 创建 Workbook 对象并清除默认工作表。
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
- 初始化 PdfTableExtractor 类的实例。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
- 声明 PdfTable 数组。
- 循环遍历PDF页面并提取每页的表格。
tableList = extractor.ExtractTable(pageIndex);
- 判断表格列表是否为空,如果不为空,则创建Excel工作表,使用 PdfTable.GetText(int rowIndex, int columnIndex) 方法从每个单元格提取数据,并通过 sheet.Range[int rowIndex + 1, int columnIndex + 1].Value 属性将数据写入到创建Excel工作表中。
- 将工作表保存为csv文件。
sheet.SaveToFile("output/表格/CSV表格.csv", ",", Encoding.UTF8);
- 或保存整个Excel工作簿为xlsx文件。
workbook.SaveToFile("output/表格/Excel表格.xlsx", ExcelVersion.Version2013);
- 关闭PDF文件和工作簿文件。
完整代码示例:
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;
namespace ExtractTablesToExcel
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 对象并加载示例PDF文件
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
// 创建 Workbook 对象并清除默认工作表
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
// 初始化 PdfTableExtractor 类的实例
PdfTableExtractor extractor = new PdfTableExtractor(doc);
// 声明 PdfTable 数组
PdfTable[]? tableList = null;
int sheetNumber = 1;
// 循环遍历页面
for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
{
// 从特定页面提取表格
tableList = extractor.ExtractTable(pageIndex);
// 判断表格列表是否为空
if (tableList != null && tableList.Length > 0)
{
// 遍历列表中的表格
foreach (PdfTable table in tableList)
{
// 添加工作表
Worksheet sheet = workbook.Worksheets.Add(string.Format("Table_{0}", sheetNumber));
// 获取特定表格的行数和列数
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);
// 将文本写入指定单元格
sheet.Range[i + 1, j + 1].Value = text;
}
}
sheet.SaveToFile("output/表格/CSV表格.csv", ",", Encoding.UTF8);
sheetNumber++;
}
}
}
// 保存为Excel工作簿
workbook.SaveToFile("output/表格/Excel表格.xlsx", ExcelVersion.Version2013);
doc.Close();
workbook.Dispose();
}
}
}
输出文件:
本文介绍了如何使用免费的Free Spire.PDF for .NET和Free Spire.XLS for .NET从PDF文件中提取表格数据并保存到TXT文件、CSV文件以及Excel文件的方法。其他更多功能请前往Spire.PDF for .NET教程查看。