Skip to content
PrivacyBrowserPDFSecurity

Markdown в PDF только в браузере: что остаётся на вашем устройстве

Как работает клиентская конвертация, какие запросы делает md2pdf и что проверить перед экспортом конфиденциального или внутреннего Markdown.

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

md2pdf — это статический сайт без бэкенда приложения. Парсинг Markdown, санитизация, генерация оглавления, предварительный просмотр, печать и верстка PDF-книг выполняются на устройстве пользователя. Это устраняет этап выгрузки на сторонний сервер, но не делает документ абсолютно невидимым для сети. Данное руководство точно определяет границы.

Общий рабочий процесс описан в статье Как преобразовать README с GitHub в PDF. Для сборки книг из нескольких глав см. Создание книги из нескольких Markdown-файлов.

Что здесь означает «только в браузере»

В md2pdf термин «только в браузере» означает отсутствие серверного рендерера. Сайт представляет собой статический HTML, CSS и JavaScript. При вставке текста он хранится только в памяти вкладки. При загрузке файла API File браузера читает его локально без отправки на сервер.

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

Практическое обещание строго и прозрачно: ваш Markdown не загружается на серверы LadeStack, у нас нет учетных записей или серверного хранилища документов.

Пошаговый процесс обработки

Документ проходит следующие этапы:

source  ->  parse  ->  resolve  ->  render  ->  sanitize  ->  preview  ->  print
  1. Источник. Чтение вставленного текста, локального файла или публичного README с GitHub.
  2. Парсинг. markdown-it обрабатывает таблицы, списки задач и блоки кода GFM.
  3. Разрешение путей. Для репозитория относительные пути картинок ведут на raw.githubusercontent.com.
  4. Рендеринг. Преобразование токенов в HTML.
  5. Санитизация. DOMPurify удаляет опасные элементы (script, iframe и др.).
  6. Превью. Очищенный HTML вставляется на страницу с якорями заголовков и оглавлением.
  7. Вывод. Вызов печати браузера или сборка книги в ZIP с помощью pdf-lib.

Все этапы после считывания исходника происходят локально на вашем ПК.

Что покидает браузер

Для локальных файлов или вставленного текста md2pdf не передает содержимое документа во внешнюю сеть, так как у сайта нет принимающего API.

В обычном использовании происходят следующие сетевые обращения:

  • Ресурсы сайта. Загрузка разметки, стилей, шрифтов и скриптов оформления.
  • Импорт с GitHub. Анонимные запросы к GitHub API для получения README и публичных картинок.
  • Внешние ресурсы в Markdown. Если в документе есть ссылки на сторонние изображения, браузер запросит их при рендеринге превью.

Например, если документ содержит ![dashboard](https://internal.example.test/chart.png), текст останется локальным, но запрос картинки уйдет на сторонний сервер.

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

Локальные файлы и вставка текста

Локальные сценарии обеспечивают максимальную приватность:

  • Вставка текста. Текст не покидает вкладку, если в нем нет внешних картинок.
  • Загрузка файла. Файл читается в памяти браузера в пределах 2 МБ и никуда не отправляется.
  • Пример. Встроенный пример загружается из локального пакета сайта.

Относительные пути к локальным картинкам не сработают без базового репозитория. Используйте абсолютные URL или примите значок недоступной картинки.

Для полной автономности удалите ссылки на внешние изображения перед печатью.

Удаленные изображения и ссылки остаются сетевыми запросами

Клиентская обработка защищает текст документа, но не защищает ресурсы, на которые этот документ ссылается.

Рассмотрим пример:

![Architecture](./docs/architecture.png)

See the [operations guide](https://example.test/ops).

При импорте с GitHub путь к картинке переписывается на сервер Raw-контента GitHub. При вставке текста абсолютный URL запрашивается напрямую с исходного сервера.

Перед экспортом конфиденциальных данных проверьте документ на наличие:

  • Ссылок на изображения с http:// и https://
  • HTML-тегов <img>
  • Внешних стилей и шрифтов
  • Data URI картинок (они не создают сетевого трафика)

DOMPurify удаляет скрипты, но сохраняет стандартные изображения как часть документа.

Ограничения GitHub и обработка сбоев

Импорт с GitHub — это анонимное чтение публичных данных с безопасными лимитами:

  • Таймаут запроса к API 15 секунд.
  • Таймаут загрузки глав 20 секунд.
  • Лимит времени на сканирование дерева 25 секунд.
  • Автоматический переход на прямое чтение Raw при исчерпании лимитов API.
  • Отсутствующие картинки заменяются плейсхолдером без прерывания экспорта.

Практический чек-лист по безопасности

Перед печатью внутренних документов проверьте:

  • В тексте нет ссылок на изображения во внутренней сети компании.
  • Адрес публичного репозитория указан корректно.
  • В документе отсутствуют токены, пароли и приватные ключи.
  • Вы проверили макет в окне предварительного просмотра.
  • Конвертация выполнена локально без обращения к облачным серверам.

Особенности оформления описаны в статье Сравнение тем оформления md2pdf.

Создайте свой PDF из README

Бесплатно, без регистрации и полностью в браузере.

Открыть конвертер