2016-06-08 5 views
0

데이터 드리븐 페이지를 내보내는 동안 삽입 페이지를 삽입 할 수 있도록 설계된 스크립트가 있습니다.이 스크립트는 친구의 작업과 내 자신의 코드 중 일부를 합병 한 것입니다. 다른 프로젝트."if"문 데이터 주도 페이지를 사용할 때 두 번 반복 루프

문제는 코드가 내 인세 트 맵과 함께 15 번과 16 번을 두 번 내보내고 그 밖의 이유가 무엇인지 파악할 수 없기 때문입니다.

루프 내에서 들여 쓰기와 관련이 있다고 생각하지만 다른 방법으로 동작 할 수는 없습니다. 어떤 도움을 주시면 감사하겠습니다!

import arcpy, os, time, datetime 
from datetime import datetime 
start_time = datetime.now() 
PageNumber = "Page " 

# Create an output directory variable i.e the location of your maps folder 
outDir = r"C:\Users\support\Desktop\Python\Book of Reference" 

# Create a new, empty pdf document in the specified output directory 
# This will be your final product 
finalpdf_filename = outDir + r"\FinalMapBook.pdf" 
if os.path.exists(finalpdf_filename): # Check to see if file already exists, delete if it does 
    os.remove(finalpdf_filename) 
finalPdf = arcpy.mapping.PDFDocumentCreate(finalpdf_filename) 


# Create a Data Driven Pages object from the mxd you wish to export 
mxdPath = r"C:\Users\support\Desktop\Python\Book Of Reference\Book_Of_Reference_20160526_Python_Test.mxd" 
tempMap = arcpy.mapping.MapDocument(mxdPath) 
tempDDP = tempMap.dataDrivenPages 

# Create objects for the layout elements that will be moving, e.g., inset data frame, scale text 
Page15 = arcpy.mapping.ListDataFrames(tempMap)[1] 
Page16 = arcpy.mapping.ListDataFrames(tempMap)[2] 

# Instead of exporting all pages at once, you will need to use a loop to export one at a time 
# This allows you to check each index and execute code to add inset maps to the correct pages 

for pgIndex in range(1, tempDDP.pageCount + 1, 1): 

    # Create a name for the pdf file you will create for each page 
    temp_filename = r"C:\Users\support\Desktop\Python\Book of Reference\Book of Reference" + \ 
          str(pgIndex) + ".pdf" 
    if os.path.exists(temp_filename): 
    os.remove(temp_filename) #Removes pdf if it is already in the folder 

    # Code for setting up the inset map on the first page # 
    if (pgIndex == 15): 
    # Set position of inset map to place it on the page layout 
    Page15.elementPositionX = 20.1717 
    Page15.elementPositionY = 2.0382 
     # Set the desired size of the inset map for this page 
    Page15.elementHeight = 9.7337 
    Page15.elementWidth = 12.7115 
     # Set the desired extent for the inset map 
    Page15insetExtent = arcpy.Extent(518878,108329,519831,107599)  
    Page15insetExtent = Page15insetExtent 
    arcpy.RefreshActiveView() 
    tempDDP.exportToPDF(temp_filename, "RANGE", pgIndex) 
    finalPdf.appendPages(temp_filename) 
    Page15.elementPositionX = 50 #Move the Inset back off the page 
    arcpy.RefreshActiveView() #Refresh to ensure the Inset has been removed 
    print PageNumber + str(pgIndex) 


    if (pgIndex == 16): 
     # Set up inset map 
    Page16.elementPositionX = 2.1013 
    Page16.elementPositionY = 18.1914 
    Page16.elementHeight = 9.7337 
    Page16.elementWidth = 12.7115 
    Page16insetExtent = arcpy.Extent(520012, 107962, 521156,107086) 
    Page16insetExtent = Page16insetExtent 
    arcpy.RefreshActiveView() 
    print PageNumber + str(pgIndex) 
    tempDDP.exportToPDF(temp_filename, "RANGE", pgIndex) 
    finalPdf.appendPages(temp_filename) 
    print PageNumber + str(pgIndex) 
    Page16.elementPositionX = 50 
    arcpy.RefreshActiveView() 



    # Else Fuction takes care of the pages that dont have insets and just itterates through using the loop on line 28 
    else : 
    tempDDP.exportToPDF(temp_filename, "RANGE", pgIndex) 
    finalPdf.appendPages(temp_filename) 
    print PageNumber + str(pgIndex) 

# Clean up 
del tempMap 

# Update the properties of the final pdf 
finalPdf.updateDocProperties(pdf_open_view="USE_THUMBS", 
          pdf_layout="SINGLE_PAGE") 
# Save your result 
finalPdf.saveAndClose() 

end_time = datetime.now() 
print('Duration: {}'.format(end_time - start_time)) 
+0

[사이트] (https://desktop.arcgis.com/en/arcmap/10.3/map/page-layouts/creating-a-map-book)를 확인하는 경우 -with-inset-maps.htm)에서 코드가 복사 된 곳에서 들여 쓰기가 다르다는 것을 알 수 있습니다. if 문에서'arcpy.RefreshActiveView()','tempDDP.exportToPDF (...)'등의 행을 이동하여 "내보내기 스크립트 작성"제목 아래의 들여 쓰기를 일치 시키십시오. – jDo

+1

선을 움직이면 이제 완벽하게 실행됩니다. 고맙습니다. – GeordiePaddy

답변

1

당신의 문제는 pgIndex가 15 일 때 의도 한대로 내보내기를 수행한다는 것입니다. 그런 다음 pgIndex가 16인지 확인합니다. pgIndex가 16이 아니므로 else에 들어가서 인세 트 맵없이 다시 내 보냅니다. 두 번째를 변경하는 것이 좋습니다. elif