Arcgis-Tools_05批量导出地图
前言
有多个mxd文件需要导出PDF文件,且每个mxd都具有数据驱动页面,网上没找到这样的脚本,索性就写一个吧,点此下载。
原理
调用 arcpy.mapping 模块 DataDrivenPages 类的 exportToPDF 方法,通过参数配置导出当前页面或者全部页面,导出1个多页PDF文件或者多个单页PDF文件。
exportToPDF (out_pdf, {page_range_type}, {page_range_string}, {multiple_files}, {resolution}, {image_quality}, {colorspace}, {compress_vectors}, {image_compression}, {picture_symbol}, {convert_markers}, {embed_fonts}, {layers_attributes}, {georef_info}, {jpeg_compression_quality}, {show_selection_symbology})
参数 | 说明 | 数据类型 |
---|---|---|
out_pdf | 用于表示输出导出文件的路径和文件名的字符串。 | String |
page_range_type | 此字符串值用于指定页面的打印方式,对于 PDF 文档,类似于 ArcMap 导出地图对话框中的页面选项卡。 ALL —导出所有页面。 CURRENT —导出活动页面。 RANGE —仅导出 page_range_string 参数中列出的页面。 SELECTED —导出选定的索引图层要素/页面。 (默认值为 ALL) | String |
page_range_string | 如果使用 page_range_type 参数中的 RANGE 选项,则此字符串用于标识要导出的页面(例如:1、3、5-12)。 | String |
multiple_files | 用于控制如何创建输出 PDF 的选项。默认情况下,所有页面都将导出为单个多页文档。您还可以指定使用两个不同的选项导出单个单页 PDF 文档。 PDF_MULTIPLE_FILES_PAGE_NAME —可以使用输出文件名的页面名称导出单页文档。 PDF_MULTIPLE_FILES_PAGE_INDEX —可以使用输出文件名的页面索引值导出单页文档。 PDF_SINGLE_FILE —导出多页文档。 (默认值为 PDF_SINGLE_FILE) | String |
resolution | 用于定义导出文件分辨率的整数值,单位为每英寸点数 (dpi)。 (默认值为 300) | Integer |
image_quality | 定义输出图像质量的字符串。 BEST —输出图像质量的重采样比为 1 BETTER —输出图像质量的重采样比为 2 NORMAL —输出图像质量的重采样比为 3 FASTER —输出图像质量的重采样比为 4 FASTEST —输出图像质量的重采样比为 5 (默认值为 BEST) | String |
colorspace | 用于定义导出文件颜色空间的字符串。 CMYK —青色、洋红色、黄色和黑色颜色模型 RGB —红色、绿色和蓝色颜色模型 (默认值为 RGB) | String |
compress_vectors | 用于控制输出文件的矢量和文本部分压缩的布尔值。图像压缩单独定义。 (默认值为 True) | Boolean |
image_compression | 用于定义在输出文件中压缩图像或栅格数据时使用的压缩方案的字符串。 ADAPTIVE —自动为页面中的每个图像选择最佳压缩类型。JPEG 适用于包含许多唯一颜色的较大图像。DEFLATE 适用于所有其它图像。 JPEG —有损数据压缩。 DEFLATE —无损数据压缩 LZW —Lempel-Ziv-Welch,无损数据压缩 NONE —不应用压缩 RLE —游程编码压缩 (默认值为 ADAPTIVE) | String |
picture_symbol | 用于定义是否将图片标记和图片填充转换为输出上的矢量或栅格化对象的字符串。 RASTERIZE_BITMAP — 使用位图标记/填充对图层进行栅格化。 RASTERIZE_PICTURE —使用任何图片标记/填充对图层进行栅格化。 VECTORIZE_BITMAP —使用位图标记/填充对图层进行矢量化。 (默认值为 RASTERIZE_BITMAP) | String |
convert_markers | 用于控制将基于字符的标记符号转换为面的布尔值。如果符号字体不可用或无法嵌入,则可用于正确显示符号。但是,将此参数设置为 True 将禁用所有基于字符的标记符号的字体嵌入,由此会导致其外观发生变化。 (默认值为 False) | Boolean |
embed_fonts | 用于控制导出文件中的字体嵌入的布尔值。当在未安装所需字体的计算机上查看文档时,可通过字体嵌入正确显示文本和字符标记。 (默认值为 True) | Boolean |
layers_attributes | 用于控制导出文件中包含的 PDF 图层和 PDF 对象数据(属性)的字符串。 LAYERS_ONLY —仅导出 PDF 图层。 LAYERS_AND_ATTRIBUTES —导出 PDF 图层和要素属性。 NONE —不应用设置。 (默认值为 LAYERS_ONLY) | String |
georef_info | 用于将每个数据框的坐标系信息导出到输出 PDF 文件中的布尔值。 (默认值为 True) | Boolean |
jpeg_compression_quality | 当 image_compression 设置为 ADAPTIVE 或 JPEG 时,用于控制压缩质量值的数字。有效范围为 1 到 100。jpeg_compression_quality 为 100 时可提供最佳图像质量,但会创建较大的导出文件。推荐范围为 70 到 90。 (默认值为 80) | Integer |
show_selection_symbology | 用于控制选择符号系统是否应显示在输出中的布尔值。 (默认值为 False) | Boolean |
脚本
import arcpy,os
path=arcpy.GetParameterAsText(0)
page_type=arcpy.GetParameterAsText(1)
export_method=arcpy.GetParameterAsText(2)
#path=r"C:\Users\Admin\Desktop\temp".decode('gb2312')
#page_type="ALL"
#export_method="OnePDF"
try:
temp_path=path+os.sep+"PDF"
if not os.path.exists(temp_path):
os.makedirs(temp_path)
for root,dirs,files in os.walk(path):
for afile in files:
if afile[-4:].lower() == '.mxd':
print root + os.sep + afile
arcpy.AddMessage(u"正在导出"+afile)
mxd = arcpy.mapping.MapDocument(root + os.sep + afile)
if hasattr(mxd,"dataDrivenPages") :
if export_method=="OnePDF" :
mxd.dataDrivenPages.exportToPDF(temp_path+os.sep+afile[:-4]+ '.pdf',page_type)
elif export_method=="MultiPDF(PageName)" :
mxd.dataDrivenPages.exportToPDF(temp_path+os.sep+afile[:-4]+ '.pdf',page_type,multiple_files="PDF_MULTIPLE_FILES_PAGE_NAME")
else :
mxd.dataDrivenPages.exportToPDF(temp_path+os.sep+afile[:-4]+ '.pdf',page_type,multiple_files="PDF_MULTIPLE_FILES_PAGE_INDEX")
else :
arcpy.mapping.ExportToPDF(mxd, temp_path+os.sep+afile[:-4]+ '.pdf')
del mxd
arcpy.AddMessage("成功导出全部文件!")
except arcpy.ExecuteError:
print arcpy.GetMessages()
工具
为方便使用,将脚本改为Arcgis工具,点此下载。
是否拥有数据驱动页面都可使用,当无数据驱动页面,后两个参数则无效,只会导出一个单页PDF文件。
参数说明:
输入文件夹:选择文件夹,工具会遍历文件夹下所有mxd文件(包含子目录)。
导出范围:ALL——带数据驱动mxd的所有页面,CURRENT——当前定位的页面。
将页面导出为:OnePDF——将所有页面导出为一个多页PDF文件;MultiPDF(PageName)——使用页面名称导出多个单页PDF;MultiPDF(PageNum)——使用页面索引值导出多个单页PDF。