ArcGIS图斑批量出图:数据驱动页面与arcpy脚本实践
简介围绕ArcGIS按图斑批量出图的实操文档面向需要处理卫片图斑、大批量专题图导出的GIS从业者与测绘学习者重点解决手工逐图斑出图耗时、布局信息重复配置的问题。资源包仅含1个doc文件压缩包约29KB篇幅精简便于快速查阅与随查随用。文档以Data Driven Pages为核心串起图层与名称字段设置、排序与显示范围、比例尺和动态文本布局说明如何把村名、面积、类型等图斑属性自动带入版面并给出基于arcpy遍历页面、按图斑编号命名并导出PNG/JPG的脚本思路同时提示ArcGIS 10.2及以上环境与文本编辑器执行脚本的准备条件保留导出参数调整与错误处理的扩展空间。已有8322人学习适合希望把批量出图流程固化为可复用脚本、减少重复劳动并提升卫片图斑制图效率的读者参考。1. 从两百多张图斑截图说起ArcGIS 按图斑批量出图要解决什么ArcGIS 按图斑批量出图这件事真正卡人的地方往往不是脚本而是前面的页面规则没定清楚。某次卫片图斑核查收尾图斑层里有 1、2、3 号图斑要求每个图斑出一张 JPG图上带图斑边界、编号、面积、类型和所属片区。人工在 ArcMap 里逐条调范围、改动态文本、点导出几十条还能扛上百条就容易漏页、错名、比例尺乱跳。这套方案面向两类人做 GIS 课程设计或毕设、需要交完整批量出图流程的学生以及手里有图斑清单、要把出图做成可重复交付的从业者。核心就三件事数据驱动页面定规则布局模板定版面arcpy 脚本负责批量导出。2. 总体设计数据驱动页面、布局模板与 arcpy 的三层分工2.1 需求拆解图斑层、命名规则与出图清单先把“出图”拆成可检查的输入和输出不然后面脚本写得再顺也会卡在字段空值、重名和比例尺上。输入侧至少要有—个面图层图层里每行对应一个图斑并且有一个唯一、非空、长度可控的图斑编号字段。这个字段既是数据驱动页面的名称字段也是输出 JPG 的文件名来源。面积、类型、所属片区这些字段用来放动态文本不要拿它们当名称字段因为面积会重复、类型会重复页面名一旦重复输出文件就会互相覆盖。输出侧我一般先列一张小清单一个图斑一张 JPG文件名等于图斑编号版面 A4 横向分辨率 300 dpi图斑边界距图廓留出边距图上至少出现图斑编号、面积、类型、所属片区和比例尺。清单不用长十行就够但它决定了布局模板里要放哪些元素、脚本里要传哪些参数。表 2-1 是我常用的需求核对表做课设时可以直接照着填做项目交付时也可以拿它和需求方对一遍。要素要求说明图斑图层面图层坐标系与底图一致出图前统一数据框坐标系名称字段唯一、非空、短文本建议用图斑编号不用面积或类型排序字段可空但建议与名称字段一致影响输出顺序和日志排查动态文本字段面积、类型、所属片区等字段值先算好不在布局里做复杂计算输出格式JPG需要透明背景或高质量再考虑 PNG输出命名图斑编号.jpg文件名要避开 Windows 非法字符页面尺寸A4 横向或纵向与图例、动态文本的占位一起定分辨率300 dpi交付打印或归档时更稳妥这张表里最容易被忽略的是“名称字段唯一”。很多人拿“所属片区”当名称字段结果同一片区十几个图斑只出一张图最后还以为是脚本漏页。另一个坑是名称字段里带斜杠、冒号、星号ArcMap 里预览正常一导出就报文件名非法。需求阶段把这两个点写进清单后面能省很多返工。2.2 技术路线为什么用 Data Driven Pages 加 arcpy而不是手写循环ArcGIS 里做批量出图有几条路。第一条是纯手工在布局里逐页调范围、改文本、导出图斑少时最直观图斑一多就不可重复。第二条是模型构建器能把一些工具串起来但“每页换一个图斑、每页改动态文本”这种页面级操作并不顺手。第三条是纯 arcpy 替换布局元素理论上可行可要自己管理地图框范围、文本元素、图例、比例尺代码量会迅速膨胀。第四条是 Data Driven Pages 加 arcpy数据驱动页面负责“每页对应哪个图斑、页面名是什么、范围怎么取”arcpy 只负责“切页、取页名、导出”。这条路线把配置和批量分开出了问题也容易定位。版本上要注意ArcGIS 10 以上才有比较完整的数据驱动页面能力ArcGIS 9 不支持这套做法。ArcGIS 10.2 自带 Python 2.7 和 arcpy.mapping脚本里用arcpy.mapping.MapDocument、dataDrivenPages.currentPageID、ExportToJPEG这些接口。ArcGIS Pro 的 arcpy 模块换成了 arcpy.mp接口名和对象模型都不一样不能把 10.2 的脚本直接粘过去跑。表 2-2 是我在方案里常写的路线对比读者可以按自己手里的版本选。路线适合场景主要限制手工逐页导出图斑少于 20 个、临时看效果不可重复容易漏页错名模型构建器工具链固定、页面元素不变页面级动态文本和范围控制弱纯 arcpy 改布局元素需要高度定制版面代码量大图例和比例尺要自己处理Data Driven Pages 加 arcpy图斑批量出图、版面固定依赖 mxd 配置版本绑定较明显这套方案选第四条不是因为它“高级”而是因为它把最容易出错的页面规则留在了 ArcMap 里可视化的配置界面把重复劳动交给了脚本。配置一次后面换一批图斑只要换图层、改名称字段、重存 mxd脚本骨架基本不动。对课设来说这条路线也容易讲清楚数据驱动页面是规则层布局模板是表现层arcpy 是执行层三层职责分明答辩时按这三层讲老师能听明白你做了什么。2.3 运行环境与工程目录把路径、版本和输出位置先固定环境准备不复杂但容易被“版本不对”和“路径带中文”拖住。ArcGIS 10.2 安装完成后ArcMap 自带 Python 2.7Notepad 只是用来编辑和运行脚本更方便不是必需但比在 ArcMap 的 Python 窗口里反复粘贴舒服。工程目录我一般固定成英文路径不用桌面、不放在中文文件夹里也不要在路径里带空格。ArcGIS 10.2 对中文路径和中文文件名的兼容性不算好输出名可以用图斑编号目录尽量用英文。目录可以按下面这样分D:\GIS_Project\TubanExport\ data\ 图斑层、底图、边界数据 mxd\ tuban_export.mxd scripts\ export_tuban.py output\ 导出的 JPG logs\ export_log.txtdata放源数据mxd放配置好的地图文档scripts放 Python 脚本output放结果logs放失败清单。这样做的原因是脚本里只改一处根路径其他路径都用os.path.join拼出来换机器时不用满脚本找路径。下面这段代码用来确认当前 Python 能不能导入 arcpy以及版本是不是 10.2 这一支# -*- coding: utf-8 -*- import sys import arcpy # 查看当前 Python 版本ArcGIS 10.2 一般是 Python 2.7 print(sys.version) # 查看 ArcGIS 安装版本确认不是 9.x print(arcpy.GetInstallInfo()[Version])这段代码不参与出图只做环境自检。sys.version用来确认你用的是 ArcGIS 自带的 Python而不是系统里另装的 Python 3arcpy.GetInstallInfo()[Version]用来确认版本。很多人双击脚本时报ImportError: No module named arcpy原因就是用了系统 Python不是 ArcGIS 安装目录下的python.exe。Notepad 里运行脚本时命令要指向 ArcGIS 自带的解释器例如C:\Python27\ArcGIS10.2\python.exe $(FULL_CURRENT_PATH)安装路径不同就换成实际路径。提示脚本文件保存为 UTF-8 无 BOM文件头保留# -*- coding: utf-8 -*-。路径里不要出现中文和空格输出文件名由脚本清洗不要手写带斜杠的图斑名。3. 配置数据驱动页面与布局模板让每个图斑自动落到自己的图幅3.1 索引图层与字段名称字段、排序字段、范围字段怎么选打开 ArcMap先加载图斑层和底图确认数据框坐标系与图斑层一致。然后在Customize - Toolbars - Data Driven Pages打开工具栏勾选启用数据驱动页面。图层选图斑面层名称字段选图斑编号排序字段也选图斑编号。名称字段的要求是唯一、非空、不要太长因为后面它会变成文件名排序字段只影响页面顺序不影响出图数量但建议设成编号日志里按页码找问题会顺很多。范围设置有两个常见选项固定比例尺加中心点或者 Best Fit。图斑面积差异不大时我倾向固定比例尺版面统一验收时一眼能看出比例尺有没有乱。图斑面积差异很大时Best Fit 能让每个图斑都落在页面里但每页比例尺不同动态文本里要加比例尺否则读者不知道图幅尺度。范围字段不是必填项但如果图斑层里有“出图范围”字段可以用它控制每页的显示范围没有的话就用数据驱动页面自带的范围选项。这里有个细节名称字段不要用“所属片区”“图斑类型”这类重复值多的字段。数据驱动页面按名称字段分页字段重复时页面会合并或覆盖输出数量对不上。另一个细节是空值。名称字段为空的行页面名可能是空字符串导出文件名就变成.jpg脚本里必须做空值回退。我的做法是在属性表里先加一个“出图名称”字段用字段计算器把编号补进去空值填成“未编号_页码”但页码在配置阶段拿不到所以更稳的是在脚本里判断空值并用页码兜底。3.2 布局模板动态文本、图例、比例尺和指北针的排版切到布局视图先定页面尺寸和方向。A4 横向适合图斑横向分布纵向适合长条形图斑。地图框不要贴边四周留出图廓、图名、动态文本和图例的位置。动态文本从Insert - Dynamic Text - Data Driven Page Attribute插入选择图斑层和字段图斑编号、面积、类型、所属片区都可以放。面积字段如果单位是平方米先在属性表里算好不要在动态文本里做除法类型字段如果值太长可以在布局里换行或缩短别名。图例只保留主要图层不要把底图、辅助线、注记层全列进去。数据驱动页面不会自动把图例过滤成“当前图斑”所以图例的作用是说明符号不是说明当前页有哪些要素。当前图斑的信息用动态文本补不要指望图例逐页变。比例尺和指北针按需添加比例尺放在图廓右下角指北针放在右上角别和图名打架。图名可以用静态文本加动态文本拼例如“图斑核查图”加图斑编号但图名太长会压到地图框字号要提前试。版面定好后回到数据驱动页面工具栏预览第 1 页、中间页和最后一页。重点看三件事动态文本有没有随页变化图斑有没有压到图廓比例尺文本是不是当前页的比例尺。预览时发现图斑贴边不要急着改脚本先在数据驱动页面的范围设置里加边距或者在布局里把地图框缩小一点。版面问题在 mxd 里解决比在脚本里算坐标便宜得多。3.3 页面范围与比例尺策略固定比例尺、最佳范围和外扩边距固定比例尺的好处是每张图尺度一致验收时不用逐张看比例尺。做法是在数据驱动页面的范围选项里选“Center and Scale”设置一个能覆盖最大图斑的比例尺然后给地图框留边距。比例尺怎么定先看最大图斑的外接矩形按页面地图框的短边能放下它来反算。比如 A4 横向地图框宽约 25 厘米最大图斑外接矩形宽 2 公里比例尺大概在 1:8000 到 1:10000 之间再留 15% 边距。这个数不用一次到位预览最大图斑调两次就稳了。图斑面积差异大时固定比例尺会让小图斑在页面上只占一小块Best Fit 又会让比例尺跳来跳去。我的折中是分组按面积或类型把图斑分成两组小图斑一组用大比例尺大图斑一组用小比例尺分别存两个 mxd脚本里跑两遍。分组会增加一点配置工作但比一张图一个比例尺更好验收。无论选哪种动态文本里都建议放比例尺读者拿到 JPG 能知道图幅尺度答辩时也能解释为什么这页看起来比那页“放大”了。外扩边距不要省。图斑边界压到图廓上打印或截图时很容易被裁掉尤其是线状地物贴着图斑边缘时。我一般在数据驱动页面的范围设置里让图斑外接矩形外扩 10% 到 20%或者在布局里把地图框四周各缩进 0.5 厘米。外扩太多会让图斑显得小外扩太少会压边预览三页就能找到合适的值。3.4 保存与预检mxd 路径、数据源和页面预览配置完成后先把 mxd 保存到英文路径文件名也用英文例如tuban_export.mxd。保存前检查数据源File - Map Document Properties里可以看路径图层右键Data - Repair Data Source可以修丢失的源。ArcGIS 10.2 支持相对路径但脚本读取 mxd 时相对路径有时会出问题项目交付阶段我倾向用绝对路径换机器时再统一修一次数据源。保存后不要马上跑全量先手动导出第 1 页和最后一页确认 JPG 能打开、动态文本正确、图斑不压边。预检清单可以很短页面数是否等于图斑数名称字段是否有空值输出目录是否存在磁盘空间够不够mxd 里有没有图层被定义查询过滤掉。定义查询是个隐蔽坑图层被过滤后数据驱动页面仍然按图斑层分页但地图上只显示过滤后的要素导出的 JPG 可能只有图框没有图斑。预览时如果发现某页空白先看图层定义查询再看页面范围最后才怀疑脚本。4. Python 批量导出从 currentPageID 到可交付 JPG4.1 脚本骨架读取 mxd、遍历页面、按页名命名脚本的核心逻辑不复杂打开 mxd取数据驱动页面对象循环页码设置当前页取当前页的名称字段值拼输出路径导出 JPG。原示例里用range(1, mxd.dataDrivenPages.pageCount)这会漏掉最后一页因为 Python 的range不包含右边界。数据驱动页面的页码从 1 开始到pageCount结束所以循环要写成range(1, pageCount 1)。下面是我常用的骨架路径换成自己的工程目录就能跑# -*- coding: utf-8 -*- import arcpy import os import re import codecs # 工程根目录换成自己的英文路径 mxd_path rD:\GIS_Project\TubanExport\mxd\tuban_export.mxd out_dir rD:\GIS_Project\TubanExport\output log_path rD:\GIS_Project\TubanExport\logs\export_log.txt # 输出目录不存在就创建 if not os.path.exists(out_dir): os.makedirs(out_dir) mxd arcpy.mapping.MapDocument(mxd_path) ddp mxd.dataDrivenPages total ddp.pageCount print(total pages: %s % total) ok_count 0 fail_list [] # 页码从 1 到 pageCount注意 range 右边界要加 1 for page_num in range(1, total 1): ddp.currentPageID page_num raw_name ddp.pageRow.getValue(ddp.pageNameField.name) # 名称为空时跳过并记录不要生成 .jpg 这种空文件名 if raw_name is None: fail_list.append((page_num, empty page name)) continue # ArcGIS 10.2 的 Python 2.7 里字段值通常是 unicode map_name raw_name if not isinstance(map_name, unicode): map_name map_name.decode(utf-8) map_name map_name.strip() # 清洗 Windows 文件名非法字符 safe_name re.sub(ur[\\/:*?|], u_, map_name) out_jpg os.path.join(out_dir, safe_name u.jpg) try: arcpy.mapping.ExportToJPEG(mxd, out_jpg) ok_count 1 print([%s/%s] %s % (page_num, total, safe_name)) except Exception as e: fail_list.append((page_num, str(e))) print([FAIL] page %s: %s % (page_num, e)) # 写日志方便断点重跑和排查 with codecs.open(log_path, w, utf-8) as f: f.write(utotal: %s, ok: %s, fail: %s\n % (total, ok_count, len(fail_list))) for item in fail_list: f.write(upage %s: %s\n % (item[0], item[1])) del mxd print(done)这段脚本里arcpy.mapping.MapDocument读取 mxdmxd.dataDrivenPages拿到数据驱动页面对象pageCount是总页数currentPageID切到指定页。ddp.pageRow.getValue(ddp.pageNameField.name)取当前页名称字段的值也就是图斑编号。re.sub把 Windows 文件名里不允许的字符替换成下划线os.path.join拼输出路径。ExportToJPEG是导出函数后面会讲怎么加分辨率和质量参数。日志里记录总数、成功数、失败页码和异常信息跑完先看日志不要一头扎进 output 文件夹逐张翻。4.2 导出参数与文件名清洗分辨率、质量、非法字符上面的骨架用默认参数导出适合先跑通流程。正式交付时JPG 分辨率和质量要显式设置否则不同机器、不同页面尺寸导出的像素可能不一致。ArcGIS 10.2 的ExportToJPEG支持resolution和jpeg_quality参数可以把导出包成一个小函数# -*- coding: utf-8 -*- import arcpy def export_jpg(mxd, out_jpg): # resolution 控制 dpijpeg_quality 控制压缩质量范围一般 1-100 arcpy.mapping.ExportToJPEG( mxd, out_jpg, resolution300, jpeg_quality90 )这段函数把分辨率设成 300 dpi质量设成 90。resolution影响输出像素300 dpi 适合打印和归档jpeg_quality越高文件越大90 在清晰度和体积之间比较平衡。如果当前版本的 arcpy 不认关键字参数就按函数签名补齐位置参数顺序是地图文档、输出路径、数据框、导出宽、导出高、世界文件、颜色模式、分辨率、质量。参数名不要凭记忆写打开 ArcGIS 安装目录下的帮助或 Python 窗口里help(arcpy.mapping.ExportToJPEG)看一眼最稳。文件名清洗要覆盖三种情况非法字符、空值、重复值。非法字符用正则替换空值用页码兜底例如safe_name u未命名_%s % page_num重复值在输出前判断文件是否存在存在就加页码后缀。中文文件名在 ArcGIS 10.2 里不是完全不能用但很容易在编码上翻车课设和项目交付我都建议输出名用图斑编号编号里只保留字母、数字、下划线和短横线。如果业务要求必须用中文名先把输出目录设成英文文件名用 unicode 拼接跑十页试一下别一上来跑全量。4.3 日志与断点续跑失败清单、跳过已存在文件批量出图最怕跑到一半失败重跑时又把已经成功的文件覆盖一遍。脚本里可以加两个小动作输出文件已存在就跳过失败页写进日志单独重跑。跳过已存在文件适合“上次跑到 137 页失败”的场景改完问题后重跑前面 136 页不重复导出。失败清单适合图斑数量多、导出时间长的场景跑完先看日志把失败页码对应的图斑编号找出来单独做一个小 mxd 或小脚本重跑。断点续跑的判断不要只看文件是否存在还要看文件大小。导出中途失败可能留下 0 字节文件下次跑的时候被当成“已存在”跳过。可以在跳过前加一个大小判断例如小于 10 KB 就重新导出。日志里除了页码和异常还可以记录图斑编号、输出路径、导出耗时排查时能看出是某一页慢还是整体慢。日志文件用 UTF-8 写Notepad 打开不乱码如果不想处理编码日志内容全用英文也可以关键是页码和异常信息别丢。4.4 在 Notepad 中运行与环境问题Python 2.7、arcpy 路径Notepad 里运行 Python 脚本点Run - Run...输入 ArcGIS 自带解释器的完整路径和当前文件宏例如C:\Python27\ArcGIS10.2\python.exe $(FULL_CURRENT_PATH)保存成一个快捷键。脚本要先保存成.py文件编码选 UTF-8 无 BOM。运行后看控制台输出如果第一行就报ImportError先确认解释器路径如果跑到一半报编码错误先看文件名里有没有中文或特殊字符如果导出的 JPG 打不开看输出目录权限和磁盘空间。ArcGIS 10.2 的 Python 是 2.7不是 3.x。脚本里print用函数形式写可以兼容unicode和ur是 Python 2 的写法粘到 Python 3 里会报语法错误。这不是脚本写错是版本不匹配。另一个常见问题是 ArcMap 正开着同一个 mxd脚本去读会占用文件导出可能失败或读到旧配置。跑脚本前把 ArcMap 里的 mxd 保存并关闭或者复制一份 mxd 给脚本用避免文件锁。5. 避坑与排查批量出图最容易翻车的五件事5.1 输出少一张pageCount 与 range 的边界现象是图斑清单明明有 200 条output 文件夹里只有 199 张 JPG最后一条图斑没有图。原因多半是循环写成了range(1, pageCount)Python 的range不包含右边界最后一页被漏掉。数据驱动页面的页码从 1 开始pageCount是总页数正确写法是range(1, pageCount 1)。排查时先看日志里的total和实际输出数量再看循环边界不要先去怀疑图斑层少了一条。解决方式很直接循环右边界加 1日志里同时记录total、成功数、失败数。跑完用文件计数核对数量对不上再逐页看日志。如果日志显示 total 是 200、成功 199、失败 0那基本就是循环边界问题如果失败数不为 0按失败页码找原因。5.2 文件名非法或重复输出中断、覆盖现象是某一页导出时报错提示文件名无效或者两个图斑输出成了同一张图。原因通常是名称字段里含/、:、*、?、、、、|这些 Windows 不允许的字符或者名称字段有重复值、空值。ArcMap 里预览不会报错一到导出写文件就翻车。解决方式是在脚本里用正则清洗非法字符空值用页码兜底重复值在输出前判断文件是否存在并加后缀。更稳的做法是把“出图名称”单独做成一个字段在属性表里先人工检查一遍有没有空值、有没有重复、有没有特殊字符、长度是否超过 60 个字符。名称字段不要用面积、类型、日期这种容易重复的值也不要用太长的描述。文件名短一点后面拷盘、压缩、归档都省事。5.3 图斑压边、比例尺乱跳范围与比例尺设置现象是图斑边界贴到图廓上或者同一批 JPG 里有的图斑很大、有的很小比例尺每页不一样。原因一般是数据驱动页面的范围选了 Best Fit或者固定比例尺没有按最大图斑反算边距留得不够。图斑压边在预览时不容易发现导出后打印或截图才看出来返工成本高。解决方式是在范围设置里加外扩边距或者把地图框四周缩进固定比例尺按最大图斑调。比例尺乱跳不一定是错误Best Fit 本来就会逐页调整比例尺。如果业务要求统一比例尺就在动态文本里加比例尺验收时逐页看如果图斑面积差异太大统一比例尺会让小图斑看不清那就分组出图不同组用不同比例尺。不要为了“看起来统一”硬压比例尺图斑边界看不清交付时更麻烦。5.4 中文路径与中文名乱码Python 2.7 编码现象是输出文件名变成乱码或者脚本报UnicodeEncodeError、UnicodeDecodeError。ArcGIS 10.2 的 Python 2.7 默认编码不是 UTF-8arcpy 对中文路径的兼容性也有限。解决方式是把工程目录、mxd 路径、输出目录都改成英文输出文件名优先用图斑编号如果必须用中文名字段值按 unicode 处理日志用 UTF-8 写先跑十页验证。排查时看报错出现在哪一行如果是os.path.join或ExportToJPEG报编码错多半是 str 和 unicode 混用如果是文件名乱码但 JPG 能打开说明文件写成功了只是编码显示问题。课设里不必追求中文文件名编号加下划线最稳项目交付时如果甲方要求中文名提前做小批量测试别等全量跑完才发现要重来。5.5 导出空白或数据源丢失mxd 路径与图层定义查询现象是导出的 JPG 只有图框、图例和动态文本地图框里没有图斑或者部分图层丢失。原因可能是 mxd 里的数据源用了相对路径换机器后找不到也可能是图层被定义查询过滤当前页的图斑不在查询结果里还可能是页面范围设置错了地图框飞到图斑外面。排查顺序是先看 ArcMap 里图层有没有红色感叹号再看图层定义查询最后看数据驱动页面的范围预览。解决方式是在 mxd 里修复数据源项目交付阶段用绝对路径换机器时统一修一次图层定义查询如果是为了过滤显示要确认它不会把当前页图斑过滤掉页面范围预览时逐页看第 1、中间、最后三页空白页重点看。脚本本身一般不会把图斑“弄丢”它只是按 mxd 的配置导出配置错了脚本跑得再顺也没用。6. 验收与答辩用一张核对表把批量出图讲清楚验收不要靠“打开几张看看”要按清单抽查。图斑数量少就全查数量多就随机抽 10%重点看文件名、动态文本、图斑位置、比例尺和分辨率。表 6-1 是我常用的核对表课设答辩和项目交付都能用。数量对不上先看日志里的 total 和成功数文件名对不上回名称字段和清洗规则图斑压边回范围设置动态文本空白回字段值和布局元素绑定。检查项合格标准抽查方法输出数量等于图斑数文件计数与日志 total 对比文件命名与图斑编号一致随机抽 10 个对属性表动态文本编号、面积、类型、片区正确抽 5 张逐字段核对图斑位置不压图廓、不被裁切看最大和最小图斑比例尺固定比例尺一致或逐页标注看比例尺文本分辨率300 dpi 左右文字清晰放大到 100% 看空白图无只有图框的 JPG按文件大小排序看最小文件答辩时别只放一张成品图。先讲规则图斑层怎么选、名称字段为什么唯一、比例尺怎么定再讲实现数据驱动页面负责分页布局模板负责动态文本arcpy 负责循环导出最后现场跑三页让老师看到currentPageID切换和输出文件生成。准备一个失败案例比如漏最后一页或文件名非法讲清楚现象、原因、怎么改比背概念更能说明你真的跑过。从那以后我每次批量出图都强制走一遍“数量、命名、压边、空白”四项抽查哪怕只出十张图也不省这一步。希望帮到你。本文还有配套的精品资源点击获取