Как удалить JavaScript и скрытые элементы из PDF перед распространением

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

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

Что именно скрывается в PDF и почему это проблема

Формат PDF — это контейнер. Кроме страниц с текстом и картинками, внутри могут находиться объекты, которые никак не проявляются при обычном просмотре:

  • JavaScript-код. Скрипты в PDF запускаются при открытии документа, при определённых действиях пользователя (например, при печати или закрытии) или при взаимодействии с полями форм. Легитимно они используются для автоподсчёта сумм в анкетах и валидации ввода, но тот же механизм эксплуатируется для доставки вредоносной нагрузки. Многие корпоративные и государственные почтовые фильтры помечают PDF со скриптами как подозрительные или блокируют их вовсе.
  • Скрытые и необязательные слои (OCG). Слои позволяют хранить в одном файле несколько версий содержимого: например, чертёж с размерами и без. Получатель с подходящим просмотрщиком включит слой и увидит то, что вы считали скрытым.
  • Вложения. Внутри PDF могут быть прикреплены исходники, таблицы, архивы — иногда забытые, иногда оставленные намеренно «для удобства».
  • Комментарии, пометки и история правок. Заметки рецензентов, удалённый текст под закрашивающими фигурами, данные сравнения версий.
  • Метаданные. Имя автора, название организации, путь к файлу на диске, программа и версия, с которой создан документ, даты создания и правок.
  • Данные форм. Значения, введённые в интерактивные поля, включая то, что пользователь считал временным черновиком.

Отдельная категория риска — текст под изображением или фигурой. Если поверх конфиденциального абзаца положили белый прямоугольник, текст остался в файле: его выделяют, копируют и извлекают любой утилитой. То же относится к «удалённым» фрагментам, закрытым штампами: без настоящей редакции (redaction) содержимое никуда не делось.

Когда очистка обязательна, а когда достаточно проверки

Глубина подготовки зависит от того, куда и кому уходит документ.

Сценарий распространения Что обязательно Что желательно
Публикация в открытом доступе Удаление JavaScript, вложений, метаданных, проверка скрытых слоёв Растеризация страниц, если документ содержит чувствительные фрагменты
Отправка контрагенту или клиенту Удаление скриптов, вложений, черновых слоёв, проверка комментариев Очистка метаданных, удаление истории правок
Передача в госорган, суд, аудит Полная очистка плюс проверка, что удаление не нарушило целостность и читаемость Сохранение оригинала как доказательной копии у себя
Внутренний документ между доверенными коллегами Проверка на случайные вложения и черновики Очистка метаданных при передаче за пределы организации

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

Как найти JavaScript и скрытые элементы в PDF

Прежде чем удалять, стоит понять, что в файле вообще есть. Несколько способов проверки, доступных без специальных знаний.

Проверка в Adobe Acrobat

В Acrobat (платная версия, не бесплатный Reader) откройте панель инструментов и посмотрите:

  • Все инструменты → JavaScript → Все скрипты документа — показывает скрипты уровня документа.
  • Панель «Вложения» (значок скрепки) — список прикреплённых файлов.
  • Панель «Комментарии» — заметки, пометки, выделения.
  • Свойства документа (Ctrl+D) — вкладка «Описание» показывает метаданные, вкладка «Безопасность» — ограничения.
  • Панель «Слои» — если есть, документ содержит необязательные группы содержимого.
  • Предпечатная проверка (Print Production) — в профессиональных версиях есть инспекция документа, в том числе поиск скрытого текста и объектов за пределами видимой области.

Проверка без Acrobat

Если Acrobat недоступен, используйте бесплатные инструменты командной строки — они дают даже более объективную картину, потому что показывают внутреннюю структуру файла, а не то, что решил отобразить просмотрщик.

  • qpdf: команда qpdf —qdf —object-streams=disable input.pdf decoded.pdf превращает файл в читаемый вид, после чего в decoded.pdf можно искать строки «/JavaScript», «/JS», «/EmbeddedFile», «/OCG», «/Launch», «/OpenAction» обычным текстовым поиском.
  • pdftk: команда pdftk input.pdf data_dump output dump.txt выводит структуру документа, включая метаданные и закладки.
  • ExifTool: команда exiftool -a -u -g1 input.pdf показывает все метаданные, включая нестандартные и дублирующиеся теги.
  • peepdf (для тех, кто работает с безопасностью): специализированный анализатор, который явно помечает подозрительные объекты — JavaScript, действия при открытии, запуски внешних файлов.

Практический ориентир: если поиск по декодированному файлу находит «/JavaScript» или «/OpenAction», скрипты в документе есть, даже если ни один просмотрщик их не показывает. Наличие «/EmbeddedFile» означает вложения, «/OCProperties» — слои.

Пошаговое удаление JavaScript и скрытых элементов

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

  1. Сделайте резервную копию оригинала. Все операции очистки необратимы в пределах рабочего файла. Оригинал храните отдельно, в месте, из которого он не попадёт в рассылку по ошибке.
  2. Проведите инспекцию. Проверьте файл одним из способов выше: скрипты, вложения, слои, комментарии, метаданные.
  3. Удалите скрипты и действия. В Acrobat: «Все инструменты → JavaScript» — удалите все скрипты документа; затем в свойствах документа проверьте, что на вкладке «Начальный вид» не задано действие при открытии. В командной строке надёжнее всего пересобрать файл (см. ниже) — это удаляет скрипты целиком, а не по одному.
  4. Удалите вложения. В Acrobat откройте панель вложений и удалите все файлы. В pdftk: pdftk input.pdf drop_attachments output clean.pdf (в новых версиях) либо пересборка через qpdf.
  5. Разберитесь со слоями. Если скрытые слои не нужны — сведите документ: в Acrobat «Печать → Adobe PDF» с включёнными только нужными слоями, либо «Все инструменты → Организация страниц» и экспорт с плоским содержимым. Если слои нужны, но часть скрыта — вручную удалите ненужные объекты, а не полагайтесь на флаг видимости.
  6. Удалите комментарии и пометки. В Acrobat: «Комментарии → Удалить все комментарии». Убедитесь, что вместе с ними не исчезла нужная разметка.
  7. Очистите метаданные. В Acrobat: «Свойства документа → Дополнительные метаданные → Удалить свойства и информацию» (в Windows-версии пункт называется «Remove Hidden Information» / «Sanitize Document»). Санитизация одним действием удаляет скрипты, вложения, метаданные и скрытые данные — это самый быстрый путь, если вы работаете в Acrobat.
  8. Проверьте формы. Если интерактивные поля не нужны получателю, сведите их: «Печать → Adobe PDF» или экспорт в плоский PDF превращает поля в обычную графику. Если поля нужны — очистите введённые значения и удалите скрипты, привязанные к полям.
  9. Пересохраните и проверьте результат. Повторите инспекцию из шага 2 на очищенном файле. Поиск по «/JavaScript», «/EmbeddedFile», «/OpenAction» через qpdf должен ничего не находить.
  10. Откройте финальный файл в другом просмотрщике (браузер, мобильный ридер) и убедитесь, что документ выглядит и читается как ожидалось: ничего не пропало, страницы на месте, текст выделяется.

Радикальный способ: пересборка и растеризация

Если документ не содержит форм и интерактивности, самый надёжный метод очистки — пересобрать его через виртуальный принтер. Откройте PDF и «напечатайте» его в новый PDF (Adobe PDF, Microsoft Print to PDF или аналогичный драйвер). В новый файл попадает только видимое содержимое страниц: скрипты, вложения, слои, комментарии и большинство метаданных остаются в старом файле.

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

Важное предостережение: пересборка через печать не удаляет текст, скрытый под фигурами, если такой текст виден принтеру как часть содержимого страницы. Перед печатью проверьте документ инструментом поиска: если Ctrl+F находит слово, которого не видно на странице, — сначала удалите этот текст настоящей редакцией.

Настоящая редакция против закрашивания

Это самая частая и самая дорогая ошибка при подготовке документов. Закрашивание текста прямоугольником, маркером в редакторе или белой фигурой — это визуальная маскировка. Текст остаётся в файле полностью: его находит поиск, его извлекает копирование, его читают любые утилиты. Известны громкие случаи, когда «обезличенные» таким способом документы раскрывали имена и секретные данные.

Настоящая редакция (redaction) физически удаляет текст из потока содержимого. В Acrobat это инструмент «Удалить скрытую информацию → Удалить текст и изображения»: вы размечаете фрагменты, применяете редакцию, и только после применения текст исчезает из файла. После редакции обязательно проверьте результат поиском: попробуйте найти удалённое слово через Ctrl+F и скопировать область редакции в текстовый редактор. Ничего не находится — редакция выполнена правильно.

Типичные ошибки при очистке PDF

  • Удаление скриптов только уровня документа. Скрипты могут быть привязаны к отдельным полям форм, кнопкам и аннотациям. Проверка «скриптов документа» их не показывает. Если оставляете форму рабочей, проверьте скрипты каждого поля; если форма не нужна — сведите её в графику.
  • Очистка не того файла. В переписке легко прицепить оригинал вместо очищенной копии, особенно если имена похожи. Дайте очищенному файлу однозначное имя (например, с суффиксом «_final») и храните оригиналы в отдельной папке.
  • Редакция без проверки. Применённая «на глаз» редакция может не покрыть весь фрагмент или не примениться из-за сбоя. Всегда проверяйте поиском и копированием.
  • Забытые свойства документа. Даже после удаления метаданных в файле могут остаться имя в истории версий, данные о приложении-редакторе и путь к файлу. Санитизация закрывает это одним действием.
  • Слепая вера в просмотрщик. То, что ваш просмотрщик не показывает слои и не запускает скрипты, не значит, что их нет в файле. Получатель может открыть документ в другом приложении. Ориентируйтесь на структуру файла, а не на поведение одной программы.
  • Очистка без проверки читаемости. Агрессивная санитизация и пересборка иногда ломают закладки, ссылки, шрифты или порядок страниц. Всегда открывайте финальный файл целиком и листайте его от начала до конца.

Как проверить, что документ чист

Финальная приёмка очищенного PDF — короткий чек-лист, который выполняется за несколько минут:

  • Поиск по декодированному файлу (qpdf + текстовый поиск) не находит «/JavaScript», «/JS», «/OpenAction», «/EmbeddedFile», «/Launch».
  • ExifTool не показывает имя автора, организации и пути к файлу — либо показывает только то, что вы сознательно решили оставить.
  • Поиск по документу (Ctrl+F) не находит текст, которого не видно на странице.
  • Копирование области рядом с редактированными фрагментами не выдаёт скрытый текст.
  • Панель вложений пуста, панель комментариев пуста, панель слоёв отсутствует или содержит только нужные слои.
  • Документ полностью открывается в независимом просмотрщике, все страницы на месте, текст читаем.
  • Имя файла и его расположение исключают случайную отправку оригинала.

Что делать дальше

Соберите процесс в короткий регламент и применяйте его к каждому документу перед внешней отправкой: инспекция → очистка (санитизация или пересборка) → редакция конфиденциальных фрагментов → повторная проверка → отправка очищенной копии под однозначным именем. Если рассылка PDF для вас регулярна, автоматизируйте проверку командной строкой (qpdf, ExifTool, pdftk) — это занимает секунды и исключает человеческий фактор.

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

PEFile.ru