前言
有多個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。
