Как пользоваться
- Вставьте строку Base64 или data URI, начинающийся с data:application/pdf;base64, в поле ввода.
- Убедитесь, что файл определён как PDF, и прочитайте его в просмотрщике.
- Скачайте PDF, чтобы сохранить его на устройстве.
Как скопировать Base64 из ответа API
Сервисы, которые формируют счета, транспортные этикетки, отчёты или подписанные договоры, часто возвращают PDF внутри JSON, например {"filename": "label.pdf", "data": "JVBERi0..."}. Копируйте только текст между кавычками после имени поля и обращайте внимание на следующие детали:
- Экранированные косые черты. Некоторые кодировщики JSON, в том числе функция PHP
json_encode, записывают каждый символ/как\/. Поскольку/— обычный символ Base64, перед вставкой замените\/на/или сначала разберите JSON и скопируйте значение. - Кавычки и запятые. Не копируйте окружающие кавычки и запятую в конце.
- Переносы строк. Пробелы и настоящие переводы строк внутри Base64, например в значении, перенесённом через 76 символов, допустимы, и удалять их не нужно. Буквальные последовательности
\nили\r\nв необработанном JSON — другое дело: они состоят из символов обратной косой черты и букв, и их нужно удалить.
Если скопировать значение из разобранного представления в инструментах разработчика браузера, всех этих проблем с экранированием можно избежать.
Как извлечь PDF-вложение из письма
Вложения хранятся внутри исходного текста письма в кодировке Base64. Откройте исходный код письма («Показать оригинал» в Gmail, «Исходный текст сообщения» в Thunderbird, «Необработанный источник» в Apple Mail) и найдите часть, в заголовках которой есть Content-Type: application/pdf (или application/octet-stream с именем файла .pdf) и Content-Transfer-Encoding: base64. Скопируйте блок, который начинается после пустой строки под этими заголовками и заканчивается перед следующей строкой, начинающейся с --, — это граница MIME. Вставьте его сюда как есть: переносы строк игнорируются.
Как показать PDF из Base64 в своём веб-приложении
Когда фронтенд получает PDF в Base64 и должен его отобразить, Blob URL надёжнее, чем data URI, который некоторые браузеры отказываются открывать в новой вкладке:
const bytes = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
const blob = new Blob([bytes], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
window.open(url); // или используйте его как src для <iframe>
Когда документ больше не нужен, вызовите URL.revokeObjectURL(url), чтобы освободить память. Учтите, что atob принимает только стандартный алфавит Base64, поэтому данные в варианте, безопасном для URL (- и _), нужно сначала преобразовать.
Часто задаваемые вопросы
Почему мой Base64 не определяется как PDF?
JVBERi0 — это кодировка %PDF-. Если ваша строка начинается с кавычки, имени поля или другого текста, удалите его. Если она начинается с SlZCRVJ, PDF был закодирован в Base64 дважды: декодируйте его один раз с помощью декодера Base64 и вставьте результат сюда. В остальных случаях данные могут оказаться файлом другого типа, который определит инструмент Base64 в файл.PDF скачивается, но не открывается. В чём дело?
Скорее всего, строка Base64 была обрезана. Логи, консоли и инструменты для работы с базами данных часто укорачивают длинные значения, а PDF без окончания прочитать нельзя, потому что таблица перекрёстных ссылок, по которой находятся все страницы, хранится ближе к концу файла. Скопируйте значение полностью ещё раз, лучше всего сохранив исходный ответ в файл.
На телефоне предпросмотр пустой. Файл повреждён?
Не обязательно. Некоторые мобильные браузеры не умеют показывать PDF внутри страницы. Скачайте файл и откройте его в программе для чтения PDF, чтобы проверить.
Можно ли декодировать PDF, защищённый паролем?
Да. Декодирование восстанавливает файл байт в байт, включая шифрование. Предпросмотр может запросить пароль или остаться пустым, а скачанный файл откроется в любой программе для чтения PDF после ввода пароля.
Загружается ли документ куда-нибудь?
Нет. Декодирование и предпросмотр выполняются в вашем браузере, поэтому конфиденциальные PDF, например договоры, расчётные листки или медицинские документы, остаются на вашем устройстве.