PDF格式因其跨平台兼容性强、安全性高等特点而被广泛使用。但PDF文档不易编辑,因此提取PDF文档的文本从而进行操作是一个常见的需求。提取PDF中的文本可以帮助我们对PDF文档进行内容再利用,从而制作新的PDF文档或将内容插入到其他格式的文档中。在.NET平台,我们可以使用简单的C#代码轻松实现PDF文档文本的提取。
- 用C#提取PDF文本的操作步骤
- 提取PDF文本不保留文本布局
- 保留文本布局提取PDF文本
- 提取PDF页面指定区域内的文本
本文所使用的方法需要用到Free Spire.PDF for .NET,NuGet:PM> Install-Package FreeSpire.PDF
。
用C#提取PDF文本的操作步骤
库中提供了PdfTextExtractor
类来处理PDF文档的文本提取。我们可以使用页面创建PdfTextExtractor
对象,然后使用PdfTextExtractor.ExtractText()
方法来提取页面文本。同时,PdfTextExtractOptions
类能对提取选项进行设置,如设置是否保留布局和设置提取的页面区域。以下是一般操作步骤。
- 创建
PdfDocument
对象。 - 使用
PdfDocument.LoadFromFile()
方法载入PDF文档。 - 使用
PdfDocument.Pages[]
属性获取指定页面,也可以遍历所有页面。 - 使用页面创建
PdfTextExtractor
对象。 - 创建
PdfTextExtractOptions
对象并设置提取选项。 - 使用
PdfTextExtractor.ExtractText(PdfTextExtractOptions)
方法提取页面文本。 - 将提取的文本写入文件或用于其他用途。
- 释放资源。
提取PDF文本不保留文本布局
如果需要不保留文本布局直接提取文本内容,可以将PdfTextExtractOptions.IsSimpleExtraction
属性设置为true
来实现。以下是代码示例:
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;
namespace ExtractPDFText
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
// 载入PDF文档
pdf.LoadFromFile("Sample.pdf");
// 创建PdfTextExtractOptions对象,并设置不保留布局
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
extractOptions.IsSimpleExtraction = true;
// 创建StringBuilder对象以储存提取的文本
StringBuilder extractedText = new StringBuilder();
// 遍历文档页面
foreach (PdfPageBase page in pdf.Pages)
{
// 使用页面创建PdfTextExtractor对象
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 提取当前页面的文本
string text = extractor.ExtractText(extractOptions);
// 将提取到的文本添加到StringBuilder对象
extractedText.Append(text);
}
// 将提取结果写入文本文件
using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
{
writer.Write(extractedText.ToString());
}
// 释放资源
pdf.Close();
}
}
}
结果
保留文本布局提取PDF文本
如果在提取PDF文本时需要保留PDF文本的布局(使用空格填补),则可以直接使用默认的提取选项提取PDF文本。以下是代码示例:
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;
namespace ExtractPDFTextAndLayout
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
// 载入PDF文档
pdf.LoadFromFile("Sample.pdf");
// 创建文本提取选项
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
// 创建StringBuilder对象以储存提取的文本
StringBuilder extractedText = new StringBuilder();
// 遍历文档页面
foreach (PdfPageBase page in pdf.Pages)
{
// 使用页面创建PdfTextExtractor对象
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 提取当前页面的文本
string text = extractor.ExtractText(extractOptions);
// 将提取到的文本添加到StringBuilder对象
extractedText.Append(text);
}
// 将提取结果写入文本文件
using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
{
writer.Write(extractedText.ToString());
}
// 释放资源
pdf.Close();
}
}
}
结果
提取PDF页面指定区域内的文本
我们还可以通过PdfTextExtractOptions.ExtractArea
属性设置提取区域,从而实现提取页面上指定区域内的文本。以下是代码示例:
using Spire.Pdf.Texts;
using Spire.Pdf;
using System.Drawing;
using System.Text;
namespace ExtractPDFTextArea
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
// 载入PDF文档
pdf.LoadFromFile("Sample.pdf");
// 获取指定页面
PdfPageBase page = pdf.Pages[0];
// 创建PdfTextExtractor对象
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 创建PdfTextExtractOptions对象
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
// 设置要提取文本的矩形区域
extractOptions.ExtractArea = new RectangleF(80, 100, 250, 150);
// 提取页面上指定位置的文本
string extractedText = extractor.ExtractText(extractOptions);
// 将提取的文本写入文本文件
File.WriteAllText("output/ExtractPDFPageAreaText.txt", extractedText, Encoding.UTF8);
// 释放资源
pdf.Close();
}
}
}
结果
本文演示了如何使用C#代码在.NET程序中提取PDF文档的文本内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。