L'API restituisce report PDF e screenshot delle mappe come testo codificato in Base64. Si tratta di una procedura comune per trasmettere file binari (come immagini o PDF) tramite un'interfaccia basata su testo. Il file deve essere successivamente decodificato e salvato.
Salvare il report PDF
L'esempio seguente genera un report completo delle zone di carico in formato PDF e lo salva 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"Salvato: {pdf_result.name}")
Generazione PDF con indicatore di avanzamento
In alternativa, è possibile seguire in tempo reale l'avanzamento della generazione PDF lato server. Ciò è particolarmente utile quando si integra la generazione in una propria applicazione con interfaccia utente:
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))
La funzione utilizza in background una connessione WebSocket (GraphQL Subscription) e fornisce messaggi di stato progressivi, fino a quando il PDF finito è contenuto come stringa codificata in Base64 nell'ultimo passo. Il nome file proposto viene fornito dal server.
Salvare lo screenshot della mappa
L'API può generare un estratto della mappa delle zone di carico come grafica raster. Il risultato corrisponde alla rappresentazione nell'interfaccia web ed è adatto per l'integrazione in report o applicazioni proprie. Attraverso il parametro zoom, screenshot_type (PNG o JPEG) e screenshot_quality è possibile controllare l'output.
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("Salvato: schneelastzone_muenchen.png")
Il parametro zoom controlla il livello di ingrandimento dell'estratto della mappa. Valori bassi (ad es. 4) mostrano una panoramica nazionale, valori più alti (ad es. 10) un estratto dettagliato intorno alla posizione. Per JPEG è possibile impostare anche la qualità dell'immagine tramite screenshot_quality (1–100).
Cos'è Base64?
Base64 converte dati binari (come un PDF o un'immagine) in una stringa di solo testo, che può essere trasmessa senza problemi tramite un'interfaccia basata su testo come JSON. Il destinatario decodifica la stringa riportandola al file originale. In Python, la libreria standard esegue questa operazione con due righe:
import base64
file_bytes = base64.b64decode(stringa_base64)
I file generati corrispondono alle esportazioni dell'interfaccia web e possono essere integrati direttamente nella documentazione del progetto.