Почему одного черного прямоугольника недостаточно

Большинство инструментов для работы с PDF позволяют пользователям «скрывать» данные, просто рисуя черный прямоугольник поверх конфиденциального текста. Прямоугольник скрывает слова на экране, но сами символы остаются в потоке содержимого файла. Любой может выделить скрытый текст, скопировать его или запустить простой скрипт для его извлечения. Иными словами, данные никуда не делись; черный прямоугольник — это лишь визуальная маскировка.

Проблема, с которой столкнулся разработчик

Автору требовался PDF-редактор, который работал бы полностью в браузере, без загрузки файлов на сервер. Это ограничение делает невозможным использование серверных сервисов для удаления текста. Существующие клиентские решения просто накладывают фигуру поверх содержимого, оставляя исходный текст нетронутым. Задача заключалась в том, чтобы безвозвратно удалить текст, сохранив при этом скорость работы и удобство использования документа.

Выборочная растеризация страниц: основная идея

Вместо того чтобы преобразовывать весь PDF в изображение — шаг, который раздул бы размер файла и лишил бы его возможности поиска — решение растеризует только те страницы, на которых есть правки (redactions). Эти страницы становятся растровыми изображениями (bitmaps), в то время как все остальные остаются векторными PDF, сохраняя возможность выделения текста, поиска и небольшой размер файла.

Такой подход позволяет получить документ, который выглядит привычно: 19 страниц остаются четкими и доступными для поиска, а одна конфиденциальная страница превращается в чисто пиксельное изображение, где скрытая информация больше не существует.

Три практических правила для надежной конвертации

  1. Рендеринг в трехкратном масштабе — Битмап генерируется с разрешением в три раза выше стандартного для страницы. Рендеринг в низком разрешении будет выглядеть размытым на фоне окружающих векторных страниц, что может вызвать подозрения или просто выглядеть непрофессионально.
  2. Объединение всех визуальных элементов в битмап — Аннотации, подписи, водяные знаки и прямоугольник скрытия объединяются в один слой перед растеризацией страницы. Смешивание векторных аннотаций с растровым изображением на одной странице может запутать PDF-ридеры, что приведет к ошибкам отображения.
  3. Привязка к области просмотра (viewport), а не к пикселям — Аннотации привязаны к координатам области просмотра страницы. При масштабировании элементы остаются выровненными, а не смещаются или масштабируются некорректно, что в противном случае могло бы обнажить скрытый текст.

Защита от состояния гонки (race conditions)

Рендеринг каждой страницы — это асинхронная задача. Если пользователь быстро меняет размер окна браузера, несколько задач рендеринга могут наложиться друг на друга, создавая битые или перекрывающиеся кадры на холсте (canvas). В реализации используется токен рендеринга для каждой страницы: каждый новый запрос на рендеринг аннулирует предыдущий токен, заставляя старую задачу отмениться. В результате работа интерфейса остается плавной и без сбоев даже при резких изменениях UI.

Каковы компромиссы

Преобразование страницы в битмап удаляет любой скрытый текст, но также лишает возможности искать информацию или копировать содержимое этой страницы.

Куда это может развиваться дальше

Итог

Обычный черный прямоугольник не удаляет данные, он лишь скрывает их. Преобразуя в высокоразрешающие битмапы только те страницы, которые требуют редактирования, и оставляя остальную часть PDF векторной, браузерный редактор может безвозвратно стереть конфиденциальный текст, сохранив при этом быстродействие, возможность поиска и приватность документа. Этот метод балансирует между безопасностью и удобством использования, однако пользователям следует учитывать совокупное влияние на размер файла и возможность поиска при редактировании большого количества страниц.