Spire.Spreadsheet 6.12.0 已发布。该版本修复了删除列后列名重置的问题。详情请阅读以下内容。
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Spreadsheet-NET.html
手动从 PDF 文件中提取文本往往繁琐、易错且低效,尤其在处理大量文档或复杂布局文件时问题更突出。这是因为 PDF 文件基于坐标存储内容,而非线性文本流 —— 若缺乏专业工具,很难提取出结构化或易读的文本。对于 C# .NET 开发者而言,实现 PDF 文本提取自动化是简化工作流的关键:无论是文档处理、内容索引,还是数据迁移、数字归档,自动化提取都能大幅提升效率。
本文将详细介绍如何通过 C# 与 Spire.PDF for .NET(一款功能强大的 PDF 读取与处理库)从PDF中读取文本,包含从基础到高级的完整方案,附可直接复用的代码示例与常见问题解答。
目录
Spire.PDF for .NET 是一款功能丰富且对开发者友好的库,支持在 .NET 应用程序中无缝提取 PDF 文本。其优势如下:
开始前,需通过以下方式在项目中安装该库:
Install-Package Spire.PDF
若需要完整地体验 Spire.PDF for .NET 的全部功能并移除水印,您可以点击申请免费的30天试用许可证。
适用于需获取 PDF 全部文本的场景(如文档全文检索、内容分析)。通过 PdfTextExtractor(PDF 文本提取器)遍历所有页面,提取文本后保存到 TXT 文件,同时保留原格式。
C# 代码示例
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.IO;
using System.Text;
namespace ExtractAllTextFromPDF
{
internal class Program
{
static void Main(string[] args)
{
// 创建 PDF 文档实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.LoadFromFile("示例.pdf");
// 初始化 StringBuilder 以存储提取的文本
StringBuilder extractedText = new StringBuilder();
// 遍历 PDF 中的每一页
foreach (PdfPageBase page in pdf.Pages)
{
// 为当前页面创建 PdfTextExtractor 实例
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 设置提取选项
PdfTextExtractOptions option = new PdfTextExtractOptions
{
IsExtractAllText = true // 提取当前页面的所有文本
};
// 从当前页面提取文本
string text = extractor.ExtractText(option);
// 将提取的文本追加到StringBuilder中
extractedText.AppendLine(text);
}
// 将提取的文本保存到文本文件
File.WriteAllText("提取文本.txt", extractedText.ToString());
// 关闭 PDF 文档
pdf.Close();
}
}
}
Spire.PDF 不仅支持基础的全文提取,还能满足高级使用场景,例如从特定页面提取文本、从指定区域提取内容,以及获取文本布局细节(如位置和尺寸)。本节将通过实际示例介绍这些功能。
适用于只需特定页面文本的场景(如提取合同中的 “条款页”、报告中的 “数据摘要页”)。通过 Pages[index] 指定页面(注:PDF 页面索引从 0 开始,索引 0 = 第一页,索引 1 = 第二页)。
C# 代码示例
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.IO;
namespace ExtractTextFromIndividualPages
{
internal class Program
{
static void Main(string[] args)
{
// 创建 PDF 文档实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.LoadFromFile("AI数字人.pdf");
// 获取要提取文本的页面(例如,索引1对应第二页,注:索引从0开始)
PdfPageBase page = pdf.Pages[1];
// 为选中的页面创建PdfTextExtractor实例
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 设置提取选项
PdfTextExtractOptions option = new PdfTextExtractOptions
{
IsExtractAllText = true
};
// 从指定页面提取文本
string text = extractor.ExtractText(option);
// 将提取的文本保存到文本文件
File.WriteAllText("提取指定页面文本.txt", text);
// 关闭 PDF 文档
pdf.Close();
}
}
}

适用于需精准提取局部内容的场景(如提取页眉、页脚、表格区域的文本)。通过 PdfTextExtractOptions.ExtractArea 设置矩形提取区域,以限制提取范围。
C# 代码示例
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.IO;
using System.Drawing;
namespace ExtractTextFromDefinedArea
{
internal class Program
{
static void Main(string[] args)
{
// 创建 PDF 文档实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.LoadFromFile("AI数字人.pdf");
// 获取第二页(索引1对应第二页)
PdfPageBase page = pdf.Pages[1];
// 为选中的页面创建 PdfTextExtractor 实例
PdfTextExtractor textExtractor = new PdfTextExtractor(page);
// 设置提取选项(指定矩形区域)
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions
{
// 矩形区域参数:X坐标、Y坐标、宽度、高度
ExtractArea = new RectangleF(0, 0, 890, 170)
};
// 从指定矩形区域提取文本
string text = textExtractor.ExtractText(extractOptions);
// 将提取的文本保存到文本文件
File.WriteAllText("Extracted.txt", text);
// 关闭 PDF 文档
pdf.Close();
}
}
}

适用于需文本布局分析的场景(如 PDF 批注、内容叠加、格式还原)。通过 PdfTextFinder(PDF 文本查找器)获取每个文本片段的 Bounds(边界矩形),包含位置(X/Y 坐标)和尺寸(宽 / 高)。
C# 代码示例
using Spire.Pdf;
using Spire.Pdf.Texts;
using System;
using System.Collections.Generic;
using System.Drawing;
namespace ExtractTextWithPositionAndSize
{
class Program
{
static void Main(string[] args)
{
// 加载 PDF 文档
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("示例.pdf");
// 遍历文档的每一页
for (int i = 0; i < pdf.Pages.Count; i++)
{
PdfPageBase page = pdf.Pages[i];
// 为当前页面创建 PdfTextFinder 实例
PdfTextFinder finder = new PdfTextFinder(page);
// 查找页面上的所有文本片段
List<PdfTextFragment> fragments = finder.FindAllText();
Console.WriteLine($"第 {i + 1} 页:");
// 遍历每个文本片段
foreach (PdfTextFragment fragment in fragments)
{
// 提取文本内容
string text = fragment.Text;
// 获取包含位置和大小信息的边界矩形数组
RectangleF[] rects = fragment.Bounds;
Console.WriteLine($"文本:\"{text}\"");
// 遍历当前文本片段的每个边界矩形
foreach (var rect in rects)
{
Console.WriteLine($"位置:({rect.X}, {rect.Y}),尺寸:({rect.Width} × {rect.Height})");
}
Console.WriteLine(); // 空行分隔不同文本片段
}
}
}
}
}
Spire.PDF for .NET 为 C# 开发者提供了全场景的 PDF 文本提取能力:
结合这些能力,可轻松构建文档自动化工具(如 PDF 解析器、智能归档系统),大幅提升 PDF 处理效率。
答:可以。加载文件时通过重载的 LoadFromFile 方法传入密码即可,示例:
// 加载带密码的PDF(第一个参数:文件路径,第二个参数:密码)
pdf.LoadFromFile("ProtectedSample.pdf", "your_pdf_password");
答:完全支持。通过 Directory.GetFiles 遍历文件夹中的所有 PDF,批量应用提取逻辑。
答:本文虽以文本提取为核心,但 Spire.PDF 也支持提取图片;若需提取表格,可结合额外逻辑实现表格检测。
答:扫描件 PDF,需先通过 OCR(光学字符识别) 转换为可编辑文本。Spire.PDF 本身无内置 OCR,但可与 Spire.OCR for .NET 配合使用,实现从图片中提取文本。
Spire.Doc 10.11.9 已发布。该版本支持为形状设置填充色透明度,并增强了Word 到 PDF的转换功能。此外,还修复了邮件合并时程序报System.InvalidOperationException等已知问题。详情请阅读以下内容。
新功能:
Paragraph paragraph = section.AddParagraph();
Spire.Doc.Fields.TextBox textbox1 = paragraph.AppendTextBox(100, 50);
textbox1.Format.FillColor = Color.Red;
textbox1.FillTransparency = 0.45;问题修复:
尽管 PDF 文档现在已经变得非常流行,但难免我们会需要对PDF文档进行修改。这时我们可以将 PDF 文档转换为 Word 文档进行修改或二次创作。Spire.PDF for .NET 可以在保持文档布局和字体样式的前提下,将 PDF 文件精确转换为 Word 文档。本文将介绍如何使用 Spire.PDF for .NET 在C# 和 VB.NET 中将 PDF 转换为 Word。
固定布局模式转换速度快,有利于最大程度保持 PDF 文件的原貌。但是,生成的文档的可编辑性将受到限制,因为 PDF 中的每一行文本将在生成的 Word 文档中显示在单独的框架中。
流动形态是一种完整的识别模式。转换后的内容不会以框架形式呈现,并且生成的文档的结构是可流动的。生成的 Word 文档很容易重新编辑,但看起来可能与原始 PDF 文件不同。
首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PDFDoc 即Document,是一种文件格式。Doc 格式可以容纳文字格式、脚本语言等。而 Docx 文件格式相对于 Doc,所占用空间更小,在响应速度上,Docx 也要比 Doc 更加优秀。以下是将 PDF 转为 Doc/Docx 格式的具体步骤。
using Spire.Pdf;
namespace ConvertPdfToDoc
{
class Program
{
static void Main(string[] args)
{
//创建一个 PdfDocument 对象
PdfDocument doc = new PdfDocument();
//加载示例 PDF 文件
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\示例文档.pdf");
//将PDF转换为Doc格式文件并保存
doc.SaveToFile("ToDoc.doc", FileFormat.DOC);
//将PDF转换为Docx格式文件并保存
doc.SaveToFile("ToDocx.docx", FileFormat.DOCX);
}
}
}Imports Spire.Pdf
Namespace ConvertPdfToDoc
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建一个 PdfDocument 对象
Dim doc As PdfDocument = New PdfDocument()
'加载示例 PDF 文件
doc.LoadFromFile("C:\Users\Administrator\Desktop\示例文档.pdf")
'将PDF转换为Doc格式文件并保存
doc.SaveToFile("ToDoc.doc", FileFormat.DOC)
'将PDF转换为Docx格式文件并保存
doc.SaveToFile("ToDocx.docx", FileFormat.DOCX)
End Sub
End Class
End Namespace除了默认的转换引擎,Spire.PDF 还提供了另一个引擎,称为 PS 模式,将 usePsMode 和 useFlowRecognitionMode 的布尔值设置为 true 来确定使用 PS 模式并将识别模式设置为流。 以下是使用 PS 模式将 PDF 转换为 Doc/Docx 的步骤。
using Spire.Pdf;
namespace ConvertPdfToDocxUsingPsMode
{
class Program
{
static void Main(string[] args)
{
//创建一个 PdfDocument 对象
PdfDocument doc = new PdfDocument();
//加载示例 PDF 文件
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\示例文档.pdf");
// PDF转Word使用PS模式,识别模式设置为流
doc.ConvertOptions.SetPdfToDocOptions(true, true);
//将PDF转换为Doc格式文件并保存
doc.SaveToFile("ToDoc1.doc", FileFormat.DOC);
//将PDF转换为Docx格式文件并保存
doc.SaveToFile("ToDocx1.docx", FileFormat.DOCX);
}
}
}Imports Spire.Pdf
Namespace ConvertPdfToDocxUsingPsMode
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建一个 PdfDocument 对象
Dim doc As PdfDocument = New PdfDocument()
'加载示例 PDF 文件
doc.LoadFromFile("C:\Users\Administrator\Desktop\示例文档.pdf")
' PDF转Word使用PS模式,识别模式设置为流
doc.ConvertOptions.SetPdfToDocOptions(True, True)
'将PDF转换为Doc格式文件并保存
doc.SaveToFile("ToDoc1.doc", FileFormat.DOC)
'将PDF转换为Docx格式文件并保存
doc.SaveToFile("ToDocx1.docx", FileFormat.DOCX)
End Sub
End Class
End Namespace
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF 8.11.10 已发布。本次更新支持了.NET 7.0和PDF到PPTX的转换,同时也新增了压缩文档的功能。此外,该版本还修复了一些已知问题,如:添加TIFF图片后图片的背景色丢失的问题。详情请阅读以下内容。
新功能:
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(inputFile);
pdf.SaveToFile(outputFile, FileFormat.PPTX)PdfCompressor compressor = new PdfCompressor(fileName);
compressor.CompressToFIle(outputName);PdfDocument doc = new PdfDocument();
doc.LoadFromFile(input);
PdfPageBase page = doc.Pages[0];
PdfTextReplacer replacer = new PdfTextReplacer(page);
PdfTextReplaceOptions option = new PdfTextReplaceOptions();
options.ReplaceType = ReplaceActionType.IgnoreCase;
replacer.Options = option;
replacer.ReplaceText("cash", "999");
doc.SaveToFile("output.pdf", FileFormat.PDF);问题修复:
2023年元旦节即将到来,E-iceblue 携全体职工预祝大家节日快乐、万事如意!
我们将在节日到来之际(2022年12月1日至2023年1月5日),推出本年度最大优惠活动以增加销售量并拓展用户群体。如果您对我们产品的测试效果很满意,请抓住此机会,以更低的价格购买许可证;如果您已经拥有许可证,活动期间续费将享受额外优惠。
如果您想使获取此优惠,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取报价或合同。
注意:以上折扣仅限直接从我司购买。
如果您的许可证还未过期,续费后的日期将在之前的过期日期的基础上顺延。
Spire.XLS for C++ 即将上线,这是一款专业的 C++ Excel 组件,可用于创建、读取、写入、转换和打印 Excel 文件。其他产品的 C++ 版本也会陆续推出。
邮箱:该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。、该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。
QQ:2777145891(销售),2790765778 、2181348176(技术支持)
电话:028-81705109
Spire.XLS for Java 12.11.8已发布。本次更新增强了Excel 到 PDF的转换。一些已知问题也得到了修复,如修复了加载Excel文件程序抛出java.lang.OutOfMemoryError等问题。详情请阅读以下内容。
问题修复:
Spire.XLS 12.11.3 已发布。该版本新增 CEILING.MATH、BITOR、BITAND、BITLSHIFT、BITRSHIFT 函数和“SHA-512”加密方式,还支持给 shape 分组和设置整个透视表的布局模式。同时,本次更新增强了从 Excel 到 PDF 以及 HTML 到 Excel 的转换。此外,该版本成功修复了一些已知问题。详情请阅读以下内容。
新功能:
Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "CEILING.MATH(-2.78,5,-1)";
workbook.CalculateAllValue();
workbook.SaveToFile("1.xlsx",ExcelVersion.Version2016);Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "BITOR(23,10)";
workbook.CalculateAllValue();
workbook.SaveToFile("1.xlsx",ExcelVersion.Version2016);Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "BITAND(23,10)";
workbook.CalculateAllValue();
workbook.SaveToFile("1.xlsx",ExcelVersion.Version2016);Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "BITLSHIFT(23,2)";
workbook.CalculateAllValue();
workbook.SaveToFile("1.xlsx",ExcelVersion.Version2016);Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A1"].Formula = "BITRSHIFT(23,2)";
workbook.CalculateAllValue();
workbook.SaveToFile("1.xlsx",ExcelVersion.Version2016);Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
IPrstGeomShape shape1 = worksheet.PrstGeomShapes.AddPrstGeomShape(1, 3, 50, 50, PrstGeomShapeType.RoundRect);
IPrstGeomShape shape2 = worksheet.PrstGeomShapes.AddPrstGeomShape(5, 3, 50, 50, PrstGeomShapeType.Triangle);
GroupShapeCollection groupShapeCollection = worksheet.GroupShapeCollection;
groupShapeCollection.Group(new Spire.Xls.Core.IShape[] { shape1,shape2});
workbook.SaveToFile("1.xlsx",ExcelVersion.Version2013);xlsPivotTable.Options.ReportLayout = PivotTableLayoutType.Tabular;问题修复:
Spire.PDF for Java 8.11.8已发布。该版本支持释放PdfTrueTypeFont对象,并且增强了PDF到图片的转换功能。此外还修复了提取出的表格内容不完整等已知问题。详情请阅读以下内容。
新功能:
pdfTrueTypeFont.dispose();问题修复:
在 Excel 中,分页符是将工作表分成几个不同的页面/部分的分隔符,以便我们能更好地打印文档。在必要时插入分页符,可以有效避免数据错位并确保获得所需的打印结果,且有利于处理大型数据集。本文将演示如何使用 Spire.XLS for .NET 在 Excel 中以编程方式插入水平或垂直分页符。
首先,您需要添加 Spire.XLS for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.XLS水平分页符插入到选定行和它上面的行之间。插入后,选中的行将成为新页面的最上面一行。 通过 Spire.XLS for .NET,开发人员可以使用 Worksheet.HPageBreaks.Add(CellRange) 方法插入水平分页符。 详细步骤如下。
using Spire.Xls;
namespace EditExcelComment
{
class Program
{
static void Main(string[] args)
{
//创建一个Workbook实例
Workbook workbook = new Workbook();
//加载示例 Excel 文件
workbook.LoadFromFile("input.xlsx");
//获取指定的工作表
Worksheet sheet = workbook.Worksheets[0];
//将水平分页符添加到指定的单元格区域
sheet.HPageBreaks.Add(sheet.Range["A7"]);
sheet.HPageBreaks.Add(sheet.Range["A15"]);
//将视图模式设置为预览模式
sheet.ViewMode = ViewMode.Preview;
//保存结果文件
workbook.SaveToFile("插入水平分页符.xlsx");
}
}
}Imports Spire.Xls
Namespace EditExcelComment
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建一个Workbook实例
Dim workbook As Workbook = New Workbook()
'加载示例 Excel 文件
workbook.LoadFromFile("input.xlsx")
'获取指定的工作表
Dim sheet As Worksheet = workbook.Worksheets(0)
'将水平分页符添加到指定的单元格区域
sheet.HPageBreaks.Add(sheet.Range("A7"))
sheet.HPageBreaks.Add(sheet.Range("A15"))
'将视图模式设置为预览模式
sheet.ViewMode = ViewMode.Preview
'保存结果文件
workbook.SaveToFile("插入水平分页符.xlsx")
End Sub
End Class
End Namespace
在选定列与其左侧的列之间插入垂直分页符。 插入后,选定的列将成为新页面的最左侧列。 如果想要插入垂直分页符,开发人员可以使用 Spire.XLS for .NET 提供的 Worksheet.VPageBreaks.Add(CellRange) 方法。详细步骤如下。
using Spire.Xls;
namespace EditExcelComment
{
class Program
{
static void Main(string[] args)
{
//创建一个Workbook实例
Workbook workbook = new Workbook();
//加载示例 Excel 文件
workbook.LoadFromFile("input.xlsx");
//获取指定的工作表
Worksheet sheet = workbook.Worksheets[0];
//将垂直分页符添加到指定的单元格区域
sheet.VPageBreaks.Add(sheet.Range["B1"]);
//将视图模式设置为预览模式
sheet.ViewMode = ViewMode.Preview;
//保存结果文件
workbook.SaveToFile("插入垂直分页符.xlsx");
}
}
}Imports Spire.Xls
Namespace EditExcelComment
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建一个Workbook实例
Dim workbook As Workbook = New Workbook()
'加载示例 Excel 文件
workbook.LoadFromFile("input.xlsx")
'获取指定的工作表
Dim sheet As Worksheet = workbook.Worksheets(0)
'将垂直分页符添加到指定的单元格区域
sheet.VPageBreaks.Add(sheet.Range("B1"))
'将视图模式设置为预览模式
sheet.ViewMode = ViewMode.Preview
'保存结果文件
workbook.SaveToFile("插入垂直分页符.xlsx")
End Sub
End Class
End Namespace
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。