Почему Google Cloud Vision API не принимает PDF-файлы, закодированные в Base64 из 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При попытке интеграции 1С с облачными сервисами распознавания текста, такими как Google Cloud Vision, разработчики часто сталкиваются с ошибкой INVALID_ARGUMENT при передаче данных в формате Base64. Разберем, почему это происходит и как правильно организовать передачу данных.

Разбор ошибок при кодировании Base64

Первая и самая частая проблема — избыточная обработка данных перед отправкой. Давайте проанализируем, почему использование КодироватьСтроку при формировании JSON-запроса является избыточным.

Когда мы отправляем запрос к API, мы формируем тело в формате JSON. Строка, содержащая Base64-код, уже является текстовой репрезентацией двоичных данных. Дополнительное применение кодировки URL превращает символы, которые являются частью структуры Base64, в невалидные последовательности для декодера на стороне сервера Google. Запомните: при передаче в теле HTTPЗапрос с заголовком Content-Type: application/json, данные должны быть «чистыми».

Также важно обращать внимание на символы переноса строк. Стандартный метод Base64Строка() в 1С может добавлять символы перевода каретки и переноса строки (CR/LF). API Google ожидает «бесшовную» строку. Для очистки данных используйте следующий подход:


Функция ПодготовитьBase64(ДвоичныеДанныеФайла)
    Результат = Base64Строка(ДвоичныеДанныеФайла);
    Результат = СтрЗаменить(Результат, Символы.ПС, "");
    Результат = СтрЗаменить(Результат, Символы.ВК, "");
    Возврат Результат;
КонецФункции

Почему отправка PDF напрямую не работает?

Самая важная деталь, которая часто ускользает от внимания при чтении документации, — это специфическое ограничение Google Vision API. Даже если вы идеально закодируете файл в Base64, сервис может вернуть ошибку при попытке распознавания PDF или TIFF.

Дело в том, что согласно официальной документации Google, распознавание PDF и TIFF документов через синхронные запросы напрямую в теле контента не поддерживается. Эти форматы требуют асинхронной обработки через Google Cloud Storage.

Рассмотрим правильный алгоритм действий:

  1. Загрузите ваш PDF-файл в Google Cloud Storage (Bucket) с помощью Google Cloud Storage API.
  2. Вместо передачи поля image.content в вашем JSON-запросе к Vision API, используйте поле source.gcs_image_uri.
  3. Передайте URI файла в формате gs://имя_вашего_бакета/путь_к_файлу.pdf.

Важные замечания по передаче данных

В процессе работы с файлами мы часто сталкиваемся с невидимыми маркерами. Один из таких — BOM (Byte Order Mark). Если вы сохраняете строку в файл, а потом читаете её обратно, 1С может добавить сигнатуру UTF-8 (в Base64 она выглядит как 77u/ в начале строки). Всегда проверяйте, не попал ли этот префикс в вашу финальную строку перед отправкой в API.

Также обратите внимание на настройки объекта ЗаписьJSON. Использование ЭкранированиеСимволовJSON.Нет может привести к ошибкам, если в вашей строке случайно окажутся спецсимволы JSON. Рекомендуется использовать стандартные настройки и следить за структурой формируемого объекта.

Итоги

Чтобы успешно распознать текст из PDF, проанализируем ситуацию еще раз:

Соблюдение этих правил позволит избежать ошибки Base64 decoding failed и успешно интегрировать 1С с современными облачными сервисами обработки изображений.

← На главную