乐于分享
好东西不私藏

openclaw可以把一个文件夹所有ArcGIS Pro工程布局转pdf

openclaw可以把一个文件夹所有ArcGIS Pro工程布局转pdf
#!/usr/bin/env python3"""批量导出 ArcGIS Pro 工程布局为 PDF"""import osimport arcpyimport sysdef get_desktop_gis_path():"""获取桌面 GIS 文件夹路径"""desktop = os.path.join(os.environ.get("USERPROFILE", os.path.expanduser("~")), "Desktop")    gis_path = os.path.join(desktop, "GIS")    os.makedirs(gis_path, exist_ok=True)return gis_pathdef find_all_aprx_projects(root_folder):"""递归查找所有 .aprx 文件"""aprx_files = []for root, dirs, files in os.walk(root_folder):跳过常见非工程文件夹if 'commondata' in root.lower() or '__pycache__' in root:continue        for file in files:if file.lower().endswith('.aprx'):                aprx_files.append(os.path.join(root, file))return aprx_filesdef export_layouts_to_pdf(aprx_path, output_folder):"""导出工程中的所有布局为 PDF"""exported_count = 0try:打开工程aprx = arcpy.mp.ArcGISProject(aprx_path)获取工程名(用于文件名前缀)project_name = os.path.splitext(os.path.basename(aprx_path))[0]遍历所有布局layouts = aprx.listLayouts()for i, layout in enumerate(layouts):            layout_name = layout.name生成输出文件名if len(layouts) == 1:                pdf_name = f"{project_name}.pdf"else:                pdf_name = f"{project_name}_布局{i+1}_{layout_name}.pdf"清理文件名中的非法字符pdf_name = pdf_name.replace('<''_').replace('>''_').replace(':''_').replace('"''_').replace('/''_').replace('\\''_').replace('|''_').replace('?''_').replace('*''_')            output_path = os.path.join(output_folder, pdf_name)导出 PDFtry:                layout.exportToPDF(output_path)                print(f"  [OK] 导出:{pdf_name}")                exported_count += 1except Exception as e:                print(f"  [FAIL] 导出失败 {pdf_name}{e}")关闭工程aprx.saveACopy(aprx_path)del aprxexcept Exception as e:        print(f" [FAIL] 打开工程失败 {aprx_path}{e}")return exported_countdef main():工程文件夹projects_folder = r"C:\Users\yl\Documents\ArcGIS\Projects"输出文件夹output_folder = get_desktop_gis_path()    print(f"搜索工程:{projects_folder}")    print(f"输出目录:{output_folder}")    print()查找所有 .aprx 文件aprx_files = find_all_aprx_projects(projects_folder)if not aprx_files:        print("未找到任何 ArcGIS Pro 工程文件 (.aprx)")returnprint(f"找到 {len(aprx_files)个工程文件\n")统计total_exported = 0逐个处理工程for aprx_path in aprx_files:        print(f"处理:{os.path.basename(aprx_path)}")        count = export_layouts_to_pdf(aprx_path, output_folder)        total_exported += countif count > 0:            print(f"  → 导出 {count个布局\n")else:            print(f"  → 无布局或导出失败\n")    print("=" 50)    print(f"完成!共导出 {total_exported PDF 文件到:{output_folder}")if __name__ == "__main__":    main()