该页面可以包含自动翻译的文本。

使用 C# 和 VB.NET 从 PDF 中提取文本

从 PDF 文档中提取文本是 C# 和 VB.NET 开发人员的常见任务。 您可以使用 Docotic.Pdf 库 在 Windows、Linux、macOS、Android、iOS 或云环境中只需几行代码即可提取文本。

Docotic.Pdf 库 9.3.17036-dev 回归测试 14,665 通过 NuGet 总下载量 4,191,515

您将需要 Docotic.Pdf 库来尝试示例代码。 下载 Docotic.Pdf 二进制文件 或使用其 NuGet 包。 要尝试不受评估模式限制的库,您可以在此 处 获取免费的限时许可证密钥。

文本提取有不同的方法。 让我们看一些实际的例子。

从 PDF 中提取文本

将 PDF 转换为纯文本

您可以使用纯文本对 PDF 内容进行索引、阅读或某种分析。 此示例展示了如何使用 C# 将 PDF 转换为文本:

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string documentText = pdf.GetText();
    Console.WriteLine(documentText);
}

PdfDocument.GetText()示例文档提供以下结果: C# .NET 中从 PDF 文档中提取纯文本的结果

或者,您可以从各个页面中提取文本:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    for (int i = 0; i < pdf.PageCount; ++i)
    {
        string pageText = pdf.Pages[i].GetText();
        using (var writer = new StreamWriter($"page_{i}.txt"))
            writer.Write(pageText);
    }
}

相关的 C# 和 VB.NET 示例可在 GitHub 上获取。

将 PDF 转换为格式化文本

您可以使用格式化文本来解析某些结构化文本数据或以人类可读的格式显示文本。 此示例展示了如何使用 C# 将 PDF 转换为格式化文本:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string formattedText = pdf.GetTextWithFormatting(); // or use pdf.Pages[i].GetTextWithFormatting()
    Console.WriteLine(formattedText);
}

PdfDocument.GetTextWithFormatting()示例文档提供以下结果: C# .NET 中从 PDF 文档中提取格式化文本的结果

从特定区域提取纯文本或格式化文本

您可能只需要从 PDF 页面的特定部分提取文本。 例如,仅解析页眉中的文本。 图书馆也支持这一点。 C# 示 例:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    var page = pdf.Pages[0];
    var options = new PdfTextExtractionOptions
    {
        Rectangle = new PdfRectangle(0, 0, page.Width, 100),
        WithFormatting = false
    };
    string areaText = page.GetText(options);
    Console.WriteLine(areaText);
}

此示例为示例文档提供以下结果: C# .NET 中特定区域文本提取的结果

提取详细文本信息

您还可以获得每个文本块的详细信息以进行全面分析。 Docotic.Pdf 提供按单词或字符按原样提取文本的方法。 对于每个文本块,该库都会提取:

  • 统一字符编码文本
  • 页面范围
  • 字体
  • 字体大小
  • 变换矩阵,对于缩放和旋转文本很有用
  • 渲染模式
  • 填充颜色、不透明度、图案
  • 轮廓样式
  • 每个角色的详细信息

此示例展示了如何使用 C# 从 PDF 页面中按单词提取文本:

using (PdfDocument pdf = new PdfDocument("your_document.pdf"))
{
    PdfPage page = pdf.Pages[0];
    foreach (PdfTextData data in page.GetWords())
    {
        Console.WriteLine(
            $"{{\n" +
            $"  text: '{data.GetText()}',\n" +
            $"  bounds: {data.Bounds},\n" +
            $"  font name: '{data.Font.Name}',\n" +
            $"  font size: {data.FontSize},\n" +
            $"  transformation matrix: {data.TransformationMatrix},\n" +
            $"  rendering mode: '{data.RenderingMode}',\n" +
            $"  brush: {data.Brush},\n" +
            $"  pen: {data.Pen}\n" +
            $"}},"
        );

        page.Canvas.DrawRectangle(data.Bounds);
    }

    pdf.Save("result.pdf");
}

该示例为示例文档提供以下结果: C# .NET 中从 PDF 中提取详细文本的结果

您可以使用以下 Docotic.Pdf 方法来获取详细的文本信息:

相关 GitHub 示例:

提取从右到左和双向文本

Docotic.Pdf 可以正确从 PDF 文档中提取阿拉伯语、希伯来语和波斯语文本。

在内部,PDF 文档根据视觉顺序存储文本。 这意味着使用从右到左脚本的语言中的文本会反向存储。 Docotic.Pdf 根据提取的文本的逻辑顺序重新排序。 这是从右到左文本的读者通常所期望的。

你不必做任何特别的事情。 只需使用上面的代码片段即可以正确的顺序获取 RTL 文本。

OCR(文字识别)

如果您处理的 PDF 包含带有文本的图像,那么您可以使用光学字符识 别 提取文本。 以下示例展示了如何使用 Docotic.Pdf 和 Tesseract 执行此操作:

有关更多详细信息,请参阅 .NET 中的 OCR PDF 文章。

云环境中的字体加载

上面的示例在任何环境下都可以正常工作 - Windows、Linux、macOS。 在 AWS Lambda 等云平台上,您可能需要 执行一项额外的配置步骤。

有些 PDF 文档使用非嵌入字体。 默认情况下,Docotic.Pdf 从系统字体集合(例如C:/Windows/Fonts/usr/share/fonts)加载此类字体。 但是,云平台可能会限制对这些字体集合的访问。

您可以在应用程序中部署自己的流行字体集合。 查找公共字体文件并将其复制到您的项目中。 在 .NET 项目中 使用CopyToOutputDirectory = Always标记所有字体文件。 要使用该集合,请使用自定义的 DirectoryFontLoader 初始化 PdfDocument

PdfConfigurationOptions config = PdfConfigurationOptions.Create();
config.FontLoader = new DirectoryFontLoader(new[] { "path_to_your_font_collection" }, true);
using (PdfDocument pdf = new PdfDocument("your_document.pdf", config))
{
   ...
}

结论

您可以使用 Docotic.Pdf 库 在 C# 和 VB.NET 中从 PDF 中提取纯文本或格式化文本。 您 还可以提取有关每个文本块的详细信息。 您可以[此处]下载 Docotic.Pdf(../download)。

查看从 PDF 中提取文本的 C# 和 VB.NET 示例: