04_export_pdf_and_dxf.py
"""示例 4:导出 PDF / DXF。
用法:
python 04_export_pdf_and_dxf.py [mapid] [version]
说明:
- exportPdf 返回 ``{path, status}``,``path`` 相对于 API base;纸张用
``pageWidth``/``pageHeight``(mm)等 ODA 选项。
- exportDxf 对某些图可能返回 ``{status:false, error:"Invalid Symbol Table name"}``,
可用 ``cadVersion="2018"`` 指定目标版本(2000/2004/2007/2010/2013/2018/*)。
"""
from __future__ import annotations
import sys
import urllib.parse
from _common import make_client, sample_mapid, sample_version
import vjmap # noqa: E402 _common 已把 SDK 目录加入 sys.path
def main() -> None:
svc = make_client()
mapid = sys.argv[1] if len(sys.argv) > 1 else sample_mapid()
version = sys.argv[2] if len(sys.argv) > 2 else sample_version()
print(f"[1/2] 导出 PDF (mapid={mapid}/{version})")
pdf_res = svc.cmd_export_pdf(
mapid=mapid, version=version,
pageWidth=297, pageHeight=210,
)
print(" PDF 导出返回:", pdf_res)
path = pdf_res.get("path")
if path:
base = svc.base_gateway().rstrip("/")
full_url = f"{base}/{path.lstrip('/')}?token={urllib.parse.quote(svc.token)}"
print(" 完整下载链接(可直接浏览器打开):\n ", full_url)
print(f"\n[2/2] 导出 DXF")
try:
dxf_res = svc.cmd_export_dxf(mapid=mapid, version=version, cadVersion="2018")
print(" DXF 导出返回:", dxf_res)
except vjmap.VjmapError as e:
print(" DXF 导出失败(业务错误):", e.body)
if __name__ == "__main__":
main()