如何突出显示 pdf 并转换为 HTML 使用 GroupDocs

在 PDF 中突出显示文本并将结果转换为带样式的 HTML 页面是法律审查、电子学习和数字出版的常见需求。在本教程中,您将了解如何使用 GroupDocs.Redaction for .NET 突出显示 pdf 文件,然后生成可嵌入网页门户或学习管理系统的突出显示 HTML 输出。指南涵盖环境设置、路径初始化、HTML 页面生成以及资源 URL 处理——全部配有可直接运行的 C# 代码片段。

快速答案

  • 哪个库负责突出显示? GroupDocs.Redaction for .NET。
  • 支持哪些 .NET 版本? .NET Framework 4.6+、.NET Core 3.1+、.NET 5/6/7。
  • 生产环境需要许可证吗? 是的——商业许可证可移除试用限制。
  • 可以处理大 PDF(数百页)吗? 可以,API 会流式读取页面,处理 500 页文件时内存占用不足 200 MB。
  • HTML 输出是交互式的吗? 生成的 HTML 为静态页面但已完全样式化;您可以自行添加 JavaScript 实现交互。

什么是 PDF 文本突出显示?

PDF 文本突出显示是一种视觉标记,会在选定字符后面绘制彩色覆盖层,使其在文档查看时更加醒目。GroupDocs.Redaction 直接在 PDF 的内容流中添加此覆盖层,既保留原始布局,又在导出的 HTML 中呈现突出显示效果。

为什么使用 GroupDocs.Redaction for .NET?

GroupDocs.Redaction 支持 70+ 输入和输出格式,能够在 不将整个文件加载到内存 的情况下处理多达 500 页 的 PDF,并提供 单遍 API 同时完成脱敏和突出显示。这些量化能力使其成为企业级文档流水线的可靠选择。

前置条件

  • 开发环境: Visual Studio 2022(或更高)配合 .NET Core 3.1 / .NET 6 项目。
  • NuGet 包: GroupDocs.Redaction(最新稳定版)。
  • 基础知识: C# 语法、文件系统路径以及 HTML 基础。

如何为 .NET 设置 GroupDocs.Redaction?

要安装库,请选择以下三种支持的方法之一。 .NET CLI 命令将包添加到项目文件,Package Manager Console 通过 NuGet 集成,而 UI 提供图形化浏览和安装方式。三种方式最终都会引用相同的 GroupDocs.Redaction 程序集,帮助您立即开始编码。

使用 .NET CLI:

dotnet add package GroupDocs.Redaction

使用 Package Manager Console:

Install-Package GroupDocs.Redaction

使用 NuGet Package Manager UI: 搜索 “GroupDocs.Redaction” 并点击 Install。

安装完成后,在 C# 文件顶部添加 using 指令:

using GroupDocs.Redaction;

Feature_InitializeIndexedFileInfo 类是如何工作的?

Feature_InitializeIndexedFileInfo 是一个帮助类,用于创建并存储查看器缓存和源 PDF 所需的路径。

该类准备了查看器和 HTML 生成器依赖的文件系统位置。它会为临时文件创建专用缓存文件夹,从源 PDF 派生文件夹名称,并存储原始文档的绝对路径。这些属性以只读成员形式暴露,供后续处理使用。

// ```csharp
using GroupDocs.Redaction;

// Initialize the Redactor
Redactor redactor = new Redactor("your-file-path.pdf");

如何生成 HTML 页面文件路径?

Feature_GenerateHtmlPageFilePath 根据页码为每个 HTML 页面生成确定性的文件名。

该类构建唯一标识每个渲染页面的文件名,使用简单的 p{pageNumber}.html 模式。随后将该名称与先前创建的缓存文件夹路径组合,生成 HTML 可保存的完整文件系统位置。这种确定性命名可避免在处理多页 PDF 时出现冲突。

// ```csharp
using System.IO;

namespace GroupDocs.Search.Examples.CSharp.HighlightInHtml
{
    internal class Feature_InitializeIndexedFileInfo
    {
        private readonly string _viewerCacheFolderPath;
        private readonly string _filePath;
        private readonly string _fileFolderName;
        private readonly string _fileCacheFolderPath;

        public Feature_InitializeIndexedFileInfo(string viewerCacheFolderPath, string filePath)
        {
            // Store the provided cache folder path.
            _viewerCacheFolderPath = viewerCacheFolderPath;
            
            // Store the file path.
            _filePath = filePath;
            
            // Extract and modify the file name to create a folder name.
            var fileName = Path.GetFileName(_filePath);
            _fileFolderName = fileName.Replace(".", "_");
            
            // Combine paths for cache directory.
            _fileCacheFolderPath = Path.Combine(viewerCacheFolderPath, _fileFolderName);
        }

        public string ViewerCacheFolderPath => _viewerCacheFolderPath;
        
        public string FilePath => _filePath;
        
        public string FileFolderName => _fileFolderName;
        
        public string FileCacheFolderPath => _fileCacheFolderPath;
    }
}

如何创建 HTML 页面资源文件路径和 URL?

Feature_GenerateHtmlPageResourceFilePathAndUrl 同时构建资源的物理文件路径和对应的 Web URL。

图片、字体或 CSS 等资源既需要磁盘上的位置,也需要浏览器可请求的 URL。该类接受页码和资源名称,返回一个元组,包含缓存文件夹内的绝对文件系统路径以及可由 Web 服务器映射的虚拟 URL。采用此方式可确保生成页面之间的资源引用保持一致。

// ```csharp
using System.IO;

namespace GroupDocs.Search.Examples.CSharp.HighlightInHtml
{
    internal class Feature_GenerateHtmlPageFilePath
    {
        private readonly string _fileCacheFolderPath;

        public Feature_GenerateHtmlPageFilePath(string fileCacheFolderPath)
        {
            // Initialize with cache folder path.
            _fileCacheFolderPath = fileCacheFolderPath;
        }

        public string GetHtmlPageFilePath(int pageNumber)
        {
            // Create a page-specific HTML file name.
            string pageFileName = $"p{pageNumber}.html";
            
            // Combine paths for the full file location.
            string pageFilePath = Path.Combine(_fileCacheFolderPath, pageFileName);
            return pageFilePath;
        }
    }
}

实际应用场景

  1. 法律文档审查: 突出显示条款,导出为 HTML,让律师在浏览器中进行批注。
  2. 电子学习内容: 将带注释的讲义 PDF 转换为可搜索高亮的交互式网页。
  3. 数字出版: 生成适合网络的杂志版本,突出显示的摘录吸引读者注意。

这些场景受益于 GroupDocs.Redaction 提供的 高性能流式处理,可每日处理成千上万份文档。

常见问题及解决方案

问题原因解决方案
突出显示在 HTML 中未出现生成页面缺少 CSS 类确保引用查看器的 highlight.css,或手动嵌入样式块。
大 PDF 导致内存不足使用 Document.Load 未启用流式使用 RedactorOptions 并将 EnableStreaming = true。
资源 URL 返回 404基础 URL 配置错误将 RedactionViewerOptions.BaseUrl 设置为静态文件根目录。

常见问答

问:我可以一次在同一个 PDF 中突出显示多个章节吗?
答:可以。将一组 RedactionRegion 对象传递给 Redactor.Apply,每个区域都会在同一次操作中被突出显示。

问:API 是否支持基于关键字的突出显示?
答:支持。使用 Redactor.Search 查找所有匹配项,然后对得到的区域应用高亮脱敏。

问:生成的 HTML 是交互式的吗(例如点击跳转)?
答:默认输出为静态页面,但您可以在生成后注入 JavaScript,实现导航、工具提示或自定义点击处理。

问:如何更改高亮颜色?
答:在导出的 HTML 中修改 CSS 类 .redaction-highlight,或在调用前设置 RedactionOptions.HighlightColor 属性。

问:这能处理大于 1 GB 的 PDF 吗?
答:可以,只要启用流式并分配足够的临时磁盘空间;API 永不将整个文档一次性加载到内存。

结论

现在,您已经掌握了使用 GroupDocs.Redaction for .NET 如何突出显示 pdf 并将其转换为带高亮的 HTML 页面的一整套生产就绪工作流。通过初始化索引文件信息、生成确定性的 HTML 路径以及处理资源 URL,您可以将此方案集成到任何基于 .NET 的文档管理系统、法律审查门户或电子学习平台中。


最后更新: 2026-08-20
测试环境: GroupDocs.Redaction 23.12 for .NET
作者: GroupDocs

using System.IO;

namespace GroupDocs.Search.Examples.CSharp.HighlightInHtml
{
    internal class Feature_GenerateHtmlPageResourceFilePathAndUrl
    {
        private readonly string _fileCacheFolderPath;

        public Feature_GenerateHtmlPageResourceFilePathAndUrl(string fileCacheFolderPath)
        {
            // Initialize with the cache folder path.
            _fileCacheFolderPath = fileCacheFolderPath;
        }

        public string GetHtmlPageResourceFilePath(int pageNumber, string resourceFileName)
        {
            // Construct a unique name for resources.
            string resFileName = GetResourceFileName(pageNumber, resourceFileName);
            
            // Combine paths to form full resource path.
            string resFilePath = Path.Combine(_fileCacheFolderPath, resFileName);
            return resFilePath;
        }

        public string GetHtmlPageResourceUrl(int pageNumber, string resourceFileName)
        {
            // Generate a URL-like string for the resource.
            return GetResourceFileName(pageNumber, resourceFileName);
        }

        private static string GetResourceFileName(int pageNumber, string resourceFileName)
        {
            // Construct resource names based on page number and file name.
            var resFileName = $"p{pageNumber}_{resourceFileName}";
            return resFileName;
        }
    }
}

相关教程