Как выделить pdf и конвертировать в HTML с помощью GroupDocs

Выделение текста внутри PDF и преобразование результата в стилизованную HTML‑страницу является распространённой задачей для юридической проверки, электронного обучения и цифровой публикации. В этом руководстве вы узнаете как выделить pdf файлы с помощью GroupDocs.Redaction для .NET и затем сгенерировать выделенный HTML‑вывод, который можно встроить в веб‑порталы или системы управления обучением. Руководство охватывает настройку среды, инициализацию путей, генерацию HTML‑страницы и обработку URL ресурсов — всё с готовыми к запуску фрагментами C#.

Быстрые ответы

  • Какая библиотека обрабатывает выделение? GroupDocs.Redaction for .NET.
  • Какие версии .NET поддерживаются? .NET Framework 4.6+, .NET Core 3.1+, .NET 5/6/7.
  • Нужна ли лицензия для продакшн? Да — коммерческая лицензия снимает ограничения пробной версии.
  • Можно ли обрабатывать большие PDF (сотни страниц)? Да, API потоково обрабатывает страницы и использует менее 200 МБ ОЗУ для файла из 500 страниц.
  • Является ли HTML‑вывод интерактивным? Сгенерированный HTML статичен, но полностью стилизован; вы можете добавить JavaScript для интерактивности.

Что такое выделение текста в PDF?

Выделение текста в PDF — это визуальная разметка, которая рисует цветное наложение за выбранными символами, делая их заметными при просмотре документа. GroupDocs.Redaction добавляет это наложение непосредственно в поток содержимого PDF, сохраняя оригинальное расположение и отображая выделения в экспортированном HTML.

Почему стоит использовать GroupDocs.Redaction для .NET?

GroupDocs.Redaction поддерживает более 70 форматов ввода и вывода, обрабатывает PDF до 500 страниц без загрузки всего файла в память и предлагает одно‑проходный API, который одновременно редактирует и выделяет. Эти измеримые возможности делают его надёжным выбором для корпоративных конвейеров обработки документов.

Предварительные требования

  • Среда разработки: Visual Studio 2022 (или новее) с проектом .NET Core 3.1 / .NET 6.
  • NuGet‑пакет: GroupDocs.Redaction (последний стабильный релиз).
  • Базовые знания: синтаксис C#, пути файловой системы и основы HTML.

Как настроить GroupDocs.Redaction для .NET?

Чтобы установить библиотеку, выберите один из трёх поддерживаемых методов. Команда .NET CLI добавляет пакет в ваш файл проекта, консоль Package Manager Console интегрирует его через NuGet, а пользовательский интерфейс предоставляет графический способ поиска и установки. Все три подхода приводят к тому же подключаемому модулю GroupDocs.Redaction, позволяя сразу приступить к написанию кода.

Использование .NET CLI:

dotnet add package GroupDocs.Redaction

Использование Package Manager Console:

Install-Package GroupDocs.Redaction

Использование UI NuGet Package Manager: Search for “GroupDocs.Redaction” and click Install.

После установки добавьте директиву using в начало вашего C# файла:

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 формирует как физический путь к файлу, так и соответствующий веб‑URL для ресурсов страницы.

Ресурсы, такие как изображения, шрифты или CSS‑файлы, требуют как расположения на диске, так и URL, который может запросить браузер. Этот класс принимает номер страницы и имя ресурса, затем возвращает кортеж, содержащий абсолютный путь в файловой системе внутри папки кэша и виртуальный 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. Контент для e‑learning: Преобразовывать аннотированные PDF‑лекции в интерактивные веб‑страницы с возможностью поиска выделений.
  3. Цифровая публикация: Создавать готовые к веб‑публикации версии журналов, где выделенные отрывки привлекают внимание читателя.

Эти сценарии выигрывают от высокопроизводительного потокового режима, который предоставляет GroupDocs.Redaction, позволяя обрабатывать тысячи документов в день.

Распространённые проблемы и решения

ПроблемаПричинаРешение
Выделение не отображается в HTMLОтсутствует CSS‑класс на сгенерированной страницеУбедитесь, что highlight.css просмотрщика подключён, или вставьте блок стилей вручную.
Ошибка Out‑of‑memory при больших PDFИспользуется Document.Load без потоковой обработкиИспользуйте RedactorOptions с EnableStreaming = true.
URL ресурсов возвращают 404Неправильная конфигурация базового URLУстановите RedactionViewerOptions.BaseUrl в корень папки со статическими файлами.

Часто задаваемые вопросы

В: Можно ли выделить несколько разделов в одном PDF одновременно?
О: Да. Передайте коллекцию объектов RedactionRegion в Redactor.Apply, и каждый регион будет выделен в одной операции.

В: Поддерживает ли API выделение по ключевому слову?
О: Да. Используйте Redactor.Search для поиска всех вхождений термина, затем примените выделяющую редакцию к найденным регионам.

В: Является ли сгенерированный HTML интерактивным (например, клик‑для‑перехода)?
О: По умолчанию вывод статичен, но после генерации можно внедрить JavaScript для добавления навигации, подсказок или пользовательских обработчиков кликов.

В: Как изменить цвет выделения?
О: Измените CSS‑класс .redaction-highlight в экспортированном HTML или задайте свойство HighlightColor в RedactionOptions перед применением.

В: Будет ли это работать с PDF более 1 ГБ?
О: Да, при условии включения потоковой обработки и выделения достаточного временного дискового пространства; API никогда не загружает весь документ в ОЗУ.

Заключение

Теперь у вас есть полный, готовый к продакшн рабочий процесс для как выделить pdf файлов и преобразования их в выделенные HTML‑страницы с помощью GroupDocs.Redaction для .NET. Инициализируя информацию об индексированных файлах, генерируя детерминированные пути HTML и обрабатывая URL ресурсов, вы можете интегрировать это решение в любую .NET‑основанную систему управления документами, портал юридической проверки или платформу e‑learning.


Последнее обновление: 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;
        }
    }
}

Связанные руководства