Чому чорного прямокутника недостатньо
Більшість інструментів для роботи з PDF дозволяють користувачам «редагувати» (redact) текст, малюючи чорний прямокутник поверх конфіденційної інформації. Прямокутник приховує слова на екрані, але символи залишаються у потоці вмісту файлу. Будь-хто може виділити прихований текст, скопіювати його або запустити простий скрипт для його вилучення. Іншими словами, дані все ще на місці; чорний прямокутник — це лише візуальна завіса.
Проблема, з якою зіткнувся розробник
Автору був потрібен PDF-редактор, який працює повністю в браузері, без завантаження файлів на сервер. Це обмеження унеможливлює використання бекенд-сервісів для видалення тексту. Існуючі клієнтські рішення просто накладають фігуру поверх вмісту, що залишає оригінальний текст недоторканим. Завдання полягало в тому, щоб видалити текст назавжди, забезпечивши при цьому швидкість роботи та зручність використання документа.
Вибіркова растеризація сторінок: основна ідея
Замість того, щоб перетворювати весь PDF на зображення — крок, який збільшив би розмір файлу та позбавив його можливості пошуку — це рішення растеризує лише ті сторінки, що містять редагування. Ці сторінки стають бітмапами; всі інші сторінки залишаються векторними PDF-сторінками, що зберігає можливість виділення тексту, пошук та невеликий розмір файлу.
Такий підхід дозволяє отримати документ, який виглядає звичним: 19 сторінок залишаються чіткими та доступними для пошуку, тоді як одна конфіденційна сторінка стає суто піксельним зображенням, де прихована інформація більше не існує.
Три практичні правила для надійної конвертації
- Рендеринг із трьохкратним масштабуванням – бітмап створюється з роздільною здатністю, що втричі перевищує нормальну роздільну здатність сторінки. Рендеринг із низькою роздільною здатністю виглядатиме розмитим на фоні сусідніх векторних сторінок, що може викликати підозри або просто виглядати непрофесійно.
- Об'єднання всіх візуальних елементів у бітмап – анотації, підписи, водяні знаки та прямокутник редагування об'єднуються разом перед растеризацією сторінки. Змішування векторних анотацій із растровим зображенням на одній сторінці може збити з пантелику PDF-читачі, що призведе до помилок відображення.
- Прив'язка до області перегляду (viewport), а не до пікселів – анотації прив'язані до координат області перегляду сторінки. Коли користувач масштабує сторінку, елементи залишаються вирівняними, а не зміщуються або масштабуються некоректно, що в іншому випадку могло б викрити прихований текст.
Захист від стану гонитви (race conditions)
Рендеринг кожної сторінки є асинхронним завданням. Якщо користувач швидко змінює розмір вікна браузера, кілька завдань рендерингу можуть перекриватися, створюючи пошкоджені або накладені кадри на полотні (canvas). Реалізація впроваджує токен рендерингу для кожної сторінки: кожен новий запит на рендеринг анулює попередній токен, що змушує старіше завдання самостійно скасуватися. Результатом є плавна робота без збоїв навіть за умови швидких змін інтерфейсу.
Якими є компроміси
Перетворення сторінки на бітмап видаляє будь-який прихований текст, але водночас позбавляє можливості шукати або копіювати вміст цієї сторінки.
Куди це може розвиватися далі
Підсумок
Звичайний чорний прямокутник не видаляє дані; він лише приховує їх. Перетворюючи на бітмапи високої роздільної здатності лише ті сторінки, які потребують редагування, і залишаючи решту PDF-файлу векторною, редактор, що працює лише в браузері, може назавжди стерти конфіденційний текст, зберігаючи при цьому швидкість, можливість пошуку та приватність документа. Цей метод балансує між безпекою та зручністю використання, проте користувачам слід зважати на сукупний вплив на розмір файлу та можливість пошуку при редагуванні великої кількості сторінок.
