技术选型
主体程序采用ArcPy开发,充分发挥Python语言的黏合剂特点,不仅能避免ArcGIS不同版本带来编译开销,更能灵活修改,可方便地根据客户的需求变化动态修改维护程序,减少返工。对显示字段调整、图片导出质量等可能需要频繁变化的小需求,实施人员即可现场响应。
将表格中显示的字段导出为图片,不采用Python而采用C#语言开发,理由包括:
- C#可直接引入第三方组件库并在打包时直接包含进去,而Python引入第三方库(此处的第三方,指在Python2.7、ArcPy安装后还需要额外引入的包)后,客户现场可能存在无法部署(其实本质原因是我本机在Python开发时,因公司网络原因,无法import第三方库)。
- C#可采用非Office组件来完成将Excel文件导出为图片的功能,彻底消除程序的目标运行环境对Office及其版本的依赖。
- 不同语言的程序可互相调用、交互,完全可以通过传递参数来进行。
- 为方便使用,最终提供的程序入口为一个bat文件,使用者只需要修改其中一个参数,将mxd文档路径替换为实际的路径,保存关闭后双击bat文件即可实现批量导出。
实现思路
- 将输入的mxd文档复制一份,作为我们真正使用的文档,以免程序对原始文件布局、内容造成修改。
- 检测mxd文档中的目录图层,遍历所有要素记录,每找到一条记录将其平移到布局视图中心,另存一份文档,并将指定的属性字段导出到文本文件中。
- 制作一个模板xlsx文件,调整格式(单元格内容自动换行、水平左对齐、垂直居中对齐),遍历上一步骤中导出的文本文件,动态替换模板xlsx文件中对应单元格的内容,另存xlsx文件。
- 打开xlsx文件,将指定区域的单元格导出为图片。
- 遍历mxd文档,插入与其居中打印要素对应的属性图片(替换mxd文档中的示例图片),并将文档导出为图片或PDF文件。
- 清理过程数据(包括另存的mxd文档、属性导出的文本文件、通过文本创建的xlsx文件、通过xlsx文件导出的图片)。