API возвращает PDF-отчеты и снимки карт в виде текста в кодировке Base64. Это распространенный метод передачи бинарных файлов (таких как изображения или PDF) через текстовый интерфейс. Затем файл необходимо декодировать и сохранить.
Сохранение PDF-отчета
Следующий пример создает полный отчет по зонам нагрузки в формате PDF и сохраняет его локально:
import base64
from dlubal.api.geo_zone_tool import GeoZoneTool, Language
gzt = GeoZoneTool(token="")
pdf_result = gzt.get_load_zone_pdf_result(
address="Munich, Germany",
standard="EN 1991-1-3",
annex="DIN EN 1991-1-3",
layer_id=1,
language=Language.EN,
)
if pdf_result:
with open(pdf_result.name, "wb") as f:
f.write(base64.b64decode(pdf_result.pdf))
print(f"Сохранено: {pdf_result.name}")
Создание PDF с индикатором прогресса
В качестве альтернативы вы можете отслеживать прогресс создания PDF на стороне сервера в режиме реального времени. Это особенно полезно, если вы интегрируете создание в собственное приложение с пользовательским интерфейсом:
for progress in gzt.get_load_zone_pdf(
address="Munich, Germany",
standard="EN 1991-1-3",
annex="DIN EN 1991-1-3",
layer_id=1,
language=Language.EN,
):
print(f"{progress.current_step}/{progress.steps} – {progress.message}")
if progress.pdf_result:
with open(progress.pdf_result.name, "wb") as f:
f.write(base64.b64decode(progress.pdf_result.pdf))
В фоновом режиме функция использует WebSocket-соединение (GraphQL Subscription) и поэтапно предоставляет сообщения о статусе, пока готовый PDF в виде строки в кодировке Base64 не будет включен в последний шаг. Предлагаемое имя файла предоставляется сервером.
Сохранение снимка карты
API может создать фрагмент карты зон нагрузки в виде растрового изображения. Результат соответствует отображению в веб-интерфейсе и подходит для включения в отчеты или собственные приложения. Выводом можно управлять с помощью параметров zoom, screenshot_type (PNG или JPEG) и screenshot_quality.
import base64
from dlubal.api import geo_zone_tool
from dlubal.api.geo_zone_tool import GeoZoneTool, Language
gzt = GeoZoneTool(token="")
screenshot = gzt.get_load_zone_screenshot(
address="Munich, Germany",
load_zone_type=geo_zone_tool.LoadZoneType.SNOW,
standard="EN 1991-1-3",
annex="DIN EN 1991-1-3",
layer_id=1,
zoom=6,
language=Language.DE,
screenshot_type=geo_zone_tool.ScreenshotType.PNG,
)
with open("schneelastzone_muenchen.png", "wb") as f:
f.write(base64.b64decode(screenshot.screenshot))
print("Сохранено: schneelastzone_muenchen.png")
Параметр zoom управляет уровнем увеличения фрагмента карты. Низкие значения (например, 4) показывают обзор страны, более высокие значения (например, 10) – детальный фрагмент вокруг местоположения. Для JPEG можно дополнительно установить качество изображения с помощью screenshot_quality (1–100).
Что такое Base64?
Base64 преобразует бинарные данные (например, PDF или изображение) в простую текстовую строку, которую можно легко передать через текстовый интерфейс, такой как JSON. Получатель декодирует строку обратно в исходный файл. В Python это делается с помощью стандартной библиотеки в две строки:
import base64
datei_bytes = base64.b64decode(base64_string)
Созданные файлы соответствуют экспорту из веб-интерфейса и могут быть напрямую использованы в вашей проектной документации.