We have a script tool that exports mxd maps and mapbooks to pdf. Some of the mapbooks are large 144 pages. It is sometimes failing and sometimes working fine. I am not sure what the issue is...
<SPAN class="keyword token">import</SPAN> os
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="keyword token">import</SPAN> tempfile
<SPAN class="keyword token">import</SPAN> shutil
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">remove_pdf</SPAN><SPAN class="punctuation token">(</SPAN>pdf_path<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>exists<SPAN class="punctuation token">(</SPAN>pdf_path<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
os<SPAN class="punctuation token">.</SPAN>remove<SPAN class="punctuation token">(</SPAN>pdf_path<SPAN class="punctuation token">)</SPAN>
parameter <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN>
dir_list <SPAN class="operator token">=</SPAN> parameter<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">(</SPAN><SPAN class="string token">";"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> in_path <SPAN class="keyword token">in</SPAN> dir_list<SPAN class="punctuation token">:</SPAN>
in_path <SPAN class="operator token">=</SPAN> in_path<SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"""'"""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">)</SPAN>
input_files <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>listdir<SPAN class="punctuation token">(</SPAN>in_path<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#for dirpath, subdirs, files in os.walk(in_path):</SPAN>
<SPAN class="keyword token">for</SPAN> f <SPAN class="keyword token">in</SPAN> input_files<SPAN class="punctuation token">:</SPAN>
temp_dir <SPAN class="operator token">=</SPAN> tempfile<SPAN class="punctuation token">.</SPAN>mkdtemp<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> f<SPAN class="punctuation token">.</SPAN>endswith<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"mxd"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
mxd_path <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>in_path<SPAN class="punctuation token">,</SPAN> f<SPAN class="punctuation token">)</SPAN>
mxd <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>MapDocument<SPAN class="punctuation token">(</SPAN>mxd_path<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> mxd<SPAN class="punctuation token">.</SPAN>isDDPEnabled<SPAN class="punctuation token">:</SPAN>
map_book_path <SPAN class="operator token">=</SPAN> mxd_path<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"pdf"</SPAN>
remove_pdf<SPAN class="punctuation token">(</SPAN>map_book_path<SPAN class="punctuation token">)</SPAN>
map_book_pdf <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>PDFDocumentCreate<SPAN class="punctuation token">(</SPAN>map_book_path<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\nExporting mapbook: "</SPAN> <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>in_path<SPAN class="punctuation token">,</SPAN> f<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> page <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> mxd<SPAN class="punctuation token">.</SPAN>dataDrivenPages<SPAN class="punctuation token">.</SPAN>pageCount <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\tExporting mapbook page: "</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>page<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
pdf <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>temp_dir<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"map"</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>page<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">".pdf"</SPAN><SPAN class="punctuation token">)</SPAN>
mxd<SPAN class="punctuation token">.</SPAN>dataDrivenPages<SPAN class="punctuation token">.</SPAN>currentPageID <SPAN class="operator token">=</SPAN> page
arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>ExportToPDF<SPAN class="punctuation token">(</SPAN>mxd<SPAN class="punctuation token">,</SPAN> pdf<SPAN class="punctuation token">)</SPAN>
map_book_pdf<SPAN class="punctuation token">.</SPAN>appendPages<SPAN class="punctuation token">(</SPAN>pdf<SPAN class="punctuation token">)</SPAN>
map_book_pdf<SPAN class="punctuation token">.</SPAN>saveAndClose<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Export Complete"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\nExporting map: "</SPAN> <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>in_path<SPAN class="punctuation token">,</SPAN> f<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
map_pdf_path <SPAN class="operator token">=</SPAN> mxd_path<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"pdf"</SPAN>
remove_pdf<SPAN class="punctuation token">(</SPAN>map_pdf_path<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>ExportToPDF<SPAN class="punctuation token">(</SPAN>mxd<SPAN class="punctuation token">,</SPAN> map_pdf_path<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Export Complete"</SPAN><SPAN class="punctuation token">)</SPAN>
shutil<SPAN class="punctuation token">.</SPAN>rmtree<SPAN class="punctuation token">(</SPAN>temp_dir<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\nAll Exports Complete"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Error:
Exporting mapbook: X:\xyz\mapbook.mxd
Exporting mapbook page: 1
Exporting mapbook page: 2
Exporting mapbook page: 3
Exporting mapbook page: 4
Exporting mapbook page: 5
Failed script ExportToPDF...
Traceback (most recent call last):
File "X:\Tools\Export_PDF\Dev\pdfExport.py", line 31, in <module>
arcpy.mapping.ExportToPDF(mxd, pdf)
File "c:\program files (x86)\arcgis\desktop10.4\arcpy\arcpy\utils.py", line 182, in fn_
return fn(*args, **kw)
File "c:\program files (x86)\arcgis\desktop10.4\arcpy\arcpy\mapping.py", line 1156, in ExportToPDF
layout.exportToPDF(*args)
AttributeError: PageLayoutObject: Error in executing ExportToPDF
Failed to execute (ExportToPDF).
Failed at Thu Mar 09 19:20:29 2017 (Elapsed Time: 3 hours 12 minutes 54 seconds)<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Thanks for the help!