0x
005815
2026-06-01

Guardar PDF a partir da API da Ferramenta Geo-Zone

Como guardar o PDF ou a captura de ecrã do mapa a partir da API?


Resposta:

A API retorna relatórios em PDF e capturas de tela do mapa como texto codificado em Base64. Este é um procedimento comum para transmitir arquivos binários (como imagens ou PDFs) através de uma interface baseada em texto. O arquivo deve ser posteriormente descodificado e guardado.

Guardar relatório PDF

O exemplo seguinte gera um relatório completo das zonas de carga em PDF e guarda-o localmente:


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"Guardado: {pdf_result.name}")

Geração de PDF com indicador de progresso

Em alternativa, pode acompanhar o progresso da geração do PDF no servidor em tempo real. Isto é especialmente útil se pretender integrar a geração na sua própria aplicação com interface de utilizador:


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))

Internamente, a função utiliza uma ligação WebSocket (GraphQL Subscription) e fornece mensagens de estado passo a passo até que o PDF final seja incluído como uma string codificada em Base64 no último passo. O nome de ficheiro sugerido é fornecido pelo servidor.

Guardar captura de tela do mapa

A API pode gerar um excerto do mapa das zonas de carga como imagem rasterizada. O resultado corresponde à representação na interface web e é adequado para integração em relatórios ou aplicações próprias. A saída pode ser controlada através dos parâmetros zoom, screenshot_type (PNG ou JPEG) e 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("Guardado: schneelastzone_muenchen.png")

O parâmetro zoom controla o nível de ampliação do excerto do mapa. Valores baixos (p. ex. 4) mostram uma visão geral do país, valores mais elevados (p. ex. 10) um excerto detalhado em redor da localização. No caso de JPEG, pode também definir-se a qualidade da imagem através de screenshot_quality (1–100).

O que é Base64?

Base64 converte dados binários (como um PDF ou uma imagem) numa string de texto puro, que pode ser transmitida sem problemas através de uma interface baseada em texto como JSON. O recetor descodifica a string de volta para o ficheiro original. Em Python, a biblioteca padrão trata disto com duas linhas:


import base64
ficheiro_bytes = base64.b64decode(base64_string)

Os ficheiros gerados correspondem às exportações da interface web e podem ser integrados diretamente na documentação do seu projeto.



;