冰蓝科技
|
028-81705109
|
|
微信扫一扫
|

Spire.Cloud 纯前端文档控件

Spire.Spreadsheet 6.12.0 已发布。该版本修复了删除列后列名重置的问题。详情请阅读以下内容。

问题修复:


获取 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中读取文本,包含从基础到高级的完整方案,附可直接复用的代码示例与常见问题解答。

目录

  1. 为何在 .NET 中使用 Spire.PDF 提取文本?
  2. PDF 文本提取(基础示例)
  3. PDF 文本提取进阶选项
  4. 结论
  5. 常见问题(FAQ)

1. 为何在 .NET 中使用 Spire.PDF 提取文本?

Spire.PDF for .NET 是一款功能丰富且对开发者友好的库,支持在 .NET 应用程序中无缝提取 PDF 文本。其优势如下:

  • 精准保留布局:维持原文的布局、间距和阅读顺序。
  • 详细提取能力:提取文本的同时,可获取位置、大小等元数据。
  • 无需依赖 Adobe:无需 Adobe Acrobat 或其他第三方工具即可独立运行。
  • 快速集成:简洁的 API 和详尽的文档,助力加快开发速度。

安装

开始前,需通过以下方式在项目中安装该库:

  • 通过NuGet安装(推荐):
    Install-Package Spire.PDF
    
  • 或下载 DLL 文件,在解决方案中手动引用。

若需要完整地体验 Spire.PDF for .NET 的全部功能并移除水印,您可以点击申请免费的30天试用许可证。

2. PDF 文本提取(基础示例)

适用于需获取 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();        
        }
    }
}

3. PDF 文本提取进阶选项

Spire.PDF 不仅支持基础的全文提取,还能满足高级使用场景,例如从特定页面提取文本、从指定区域提取内容,以及获取文本布局细节(如位置和尺寸)。本节将通过实际示例介绍这些功能。

3.1 从单个 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();
        }
    }
}

使用C#提取指定PDF页面中的文本

3.2 从 PDF 页面的指定区域读取文本

适用于需精准提取局部内容的场景(如提取页眉、页脚、表格区域的文本)。通过 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();
        }
    }
}

使用C#提取PDF指定区域中的文本

3.3 获取文本位置和尺寸信息

适用于需文本布局分析的场景(如 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(); // 空行分隔不同文本片段
                }
            }
        }
    }
}

4. 结论

Spire.PDF for .NET 为 C# 开发者提供了全场景的 PDF 文本提取能力:

  • 基础需求:全文提取、单页提取;
  • 进阶需求:指定区域提取;
  • 高级需求:文本位置 / 尺寸 / 字体信息提取。

结合这些能力,可轻松构建文档自动化工具(如 PDF 解析器、智能归档系统),大幅提升 PDF 处理效率。

5. 常见问题(FAQ)

Q1:Spire.PDF 能否从受密码保护的 PDF 中提取文本?

答:可以。加载文件时通过重载的 LoadFromFile 方法传入密码即可,示例:

// 加载带密码的PDF(第一个参数:文件路径,第二个参数:密码)
pdf.LoadFromFile("ProtectedSample.pdf", "your_pdf_password");

Q2:Spire.PDF 支持批量提取吗?

答:完全支持。通过 Directory.GetFiles 遍历文件夹中的所有 PDF,批量应用提取逻辑。

Q3:除了文本,能否提取 PDF 中的图片或表格??

答:本文虽以文本提取为核心,但 Spire.PDF 也支持提取图片;若需提取表格,可结合额外逻辑实现表格检测。

Q5:Spire.PDF 能否从扫描件(图像型 PDF)中提取文本?

答:扫描件 PDF,需先通过 OCR(光学字符识别) 转换为可编辑文本。Spire.PDF 本身无内置 OCR,但可与 Spire.OCR for .NET 配合使用,实现从图片中提取文本。

Spire.Doc 10.11.9 已发布。该版本支持为形状设置填充色透明度,并增强了Word 到 PDF的转换功能。此外,还修复了邮件合并时程序报System.InvalidOperationException等已知问题。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.Doc 10.11.9请点击:

https://www.e-iceblue.cn/Downloads/Spire-Doc-NET.html

尽管 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

首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。

PM> Install-Package Spire.PDF

将 PDF 转换为固定布局的 Doc/Docx 文档

Doc 即Document,是一种文件格式。Doc 格式可以容纳文字格式、脚本语言等。而 Docx 文件格式相对于 Doc,所占用空间更小,在响应速度上,Docx 也要比 Doc 更加优秀。以下是将 PDF 转为 Doc/Docx 格式的具体步骤。

  • C#
  • VB.NET
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

将 PDF 转换为流动形态的 Doc/Docx 文档

除了默认的转换引擎,Spire.PDF 还提供了另一个引擎,称为 PS 模式,将 usePsMode 和 useFlowRecognitionMode 的布尔值设置为 true 来确定使用 PS 模式并将识别模式设置为流。 以下是使用 PS 模式将 PDF 转换为 Doc/Docx 的步骤。

  • C#
  • VB.NET
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

C#/VB.NET 将 PDF 转为 Word

申请临时 License

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

Spire.PDF 8.11.10 已发布。本次更新支持了.NET 7.0和PDF到PPTX的转换,同时也新增了压缩文档的功能。此外,该版本还修复了一些已知问题,如:添加TIFF图片后图片的背景色丢失的问题。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.PDF 8.11.10请点击:

https://www.e-iceblue.cn/Downloads/Spire-PDF-NET.html

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 for Java 12.11.8请点击:

https://www.e-iceblue.cn/Downloads/Spire-XLS-JAVA.html

Spire.XLS 12.11.3 已发布。该版本新增 CEILING.MATH、BITOR、BITAND、BITLSHIFT、BITRSHIFT 函数和“SHA-512”加密方式,还支持给 shape 分组和设置整个透视表的布局模式。同时,本次更新增强了从 Excel 到 PDF 以及 HTML 到 Excel 的转换。此外,该版本成功修复了一些已知问题。详情请阅读以下内容。

新功能:

问题修复:


下载Spire.XLS 12.11.3请点击:

https://www.e-iceblue.cn/Downloads/Spire-XLS-NET.html

Spire.PDF for Java 8.11.8已发布。该版本支持释放PdfTrueTypeFont对象,并且增强了PDF到图片的转换功能。此外还修复了提取出的表格内容不完整等已知问题。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.PDF for Java 8.11.8请点击:

https://www.e-iceblue.cn/Downloads/Spire-PDF-JAVA.html

在 Excel 中,分页符是将工作表分成几个不同的页面/部分的分隔符,以便我们能更好地打印文档。在必要时插入分页符,可以有效避免数据错位并确保获得所需的打印结果,且有利于处理大型数据集。本文将演示如何使用 Spire.XLS for .NET 在 Excel 中以编程方式插入水平或垂直分页符。

安装 Spire.XLS for .NET

首先,您需要添加 Spire.XLS for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。

PM> Install-Package Spire.XLS

在 Excel 工作表中插入水平分页符

水平分页符插入到选定行和它上面的行之间。插入后,选中的行将成为新页面的最上面一行。 通过 Spire.XLS for .NET,开发人员可以使用 Worksheet.HPageBreaks.Add(CellRange) 方法插入水平分页符。 详细步骤如下。

  • C#
  • VB.NET
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

C#/VB.NET 在 Excel 中插入分页符

在 Excel 工作表中插入垂直分页符

在选定列与其左侧的列之间插入垂直分页符。 插入后,选定的列将成为新页面的最左侧列。 如果想要插入垂直分页符,开发人员可以使用 Spire.XLS for .NET 提供的 Worksheet.VPageBreaks.Add(CellRange) 方法。详细步骤如下。

  • C#
  • VB.NET
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

C#/VB.NET 在 Excel 中插入分页符

申请临时 License

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。