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