Daha çox

ArcPy Data Driven Pages AttributeError: PageLayoutObject: ExportToPDF tətbiqində səhv


Bir sıra datadriven səhifələrini ixrac etməyə çalışıram. Bir səhifədə icra edərkən heç bir problem yoxdur, bir neçə səhifədə icra edərkən heç bir problem yoxdur. bir çox səhifədə ciddi dram oynayır. Başlanğıcda bunun mxd (ESRI cavabı) ilə bağlı bir problem ola biləcəyini düşünürdüm, ancaq ssenarini son uğursuz olduğu səhifədə icra etsəm (indeksdəki tərif sorğusu vasitəsilə) yaxşı işləyir.

Mənim fərziyyəm ya yaddaş problemi, ya da pdf funksiyasına ötürülmə vaxtı idi.

arcpy, time #Reference MXD və qatları mxd = arcpy.mapping.MapDocument (r "C:  Working  1. Layihə Tapşırıqları  Məhdudiyyətlər Xəritələri  Məhdudiyyətlər Xəritələri - OW.mxd") LabelsLayer = arcpy.mapping.ListLayers (mxd, "Etiketlər") [0] outpath = "C:  Constraints " # arcpy.GetParameterAsText (0) # arcpy.mapping.ListLayoutElements (mxd) içindəki elm üçün referans səhifə düzeni elementləri: əgər elm.name == "horzLine ": horzLine = elm əgər elm.name ==" Lot_Cell ": Lot_Cell = elm əgər elm.name ==" Landholder_Cell ": Landholder_Cell = elm əgər elm.name ==" ATW_Cell ": ATW_Cell = elm. "Ass_Start_Cell": Ass_Start_Cell = elm əgər elm.name == "Ass_End_Cell": Ass_End_Cell = elm əgər elm.name == "Ass_Laar_Cell": Ass_Laar_Cell = elm əgər elm.name == "Con_Start_Cell": Con_Start_Cell = == "Con_End_Cell": Con_End_Cell = elm.name əgər qarışıq == "Con_Laar_Cell": Con_Laar_Cell = elm əgər elm.name == "Notes_Cell": Notes_Cell = elm əgər elm.name == "MPC_LOGO": MPC_LOGO = elm .name == "Header": Header = elm əgər elm.name == "Margin_Text": Margin_Text = elm əgər elm.name == "Data_Frame": Data_Frame = elm əgər elm.name == "vertLines": vertLines = elm # İstinad DDP obyekti ddp = mxd.dataDrivenPages ddp.refresh () # Qrafik cədvəlinin dəyişən dəyərləri maxtableHeight = hər DDP səhifə vasitəsilə 6,6 mintableHeight = 0,9 tableWidth = 41.2 upperY = 0.4 horzLineX = 0.4 Lot_CellX = 0,4001 Landholder_CellX = 2,5001 ATW_CellX = 7,0001 Ass_Start_CellX = 12,0001 Ass_End_CellX = 13,3001 Ass_Laar_CellX = 14,6001 Con_Start_CellX = 17,5001 Con_End_CellX = 18,8001 Con_Laar_CellX = 20,1001 Notes_CellX = 23,0001 #Loop pageNum in range (1, mxd.dataDrivenPages.pageCount + 1): mxd.dataDrivenPages.currentPageID = pageNum #Build seçim dəsti Outfolder = ddp.pageRow.Region PackageName = ddp.pageRow.Page_Name numRecords (int.) .getOutput (0)) print str (PackageName) + "Xüsusiyyət sayı:" + str (numRecords) # satır sayı səhifə boşluğunu aşarsa, numRecords> 20: rowHeight = maxtableHeight / numRecord satır hündürlüyünü dəyişdirin. s Data_Frame.elementHeight = 22.0 Margin_Text.elementHeight = 6.6 vertLines.elementHeight = 6 MPC_LOGO.elementPositionY = 7.3 Header.elementPositionY = 6.7 else: rowHeight = 0.3 Data_Frame.elementHeight = (28.3 - (numRecords * 0.3) - (numRecords * 0.3)) vertLines.elementHeight = (numRecords * 0.3) MPC_LOGO.elementPositionY = (1 + (numRecords * 0.3)) Header.elementPositionY = (0.4 + (numRecords * 0.3)) # Set və klonlama üfüqi xətt iş horzLine .elementWidth = tableWidth horzLine.elementPositionX = horzLineX horzLine.elementPositionY = yuxarı Y y = horY üçündür (1, numRecords + 1): y = y + rowHeight temp_horz = horzLine.clone ("_ clone") temp_horz.ele Satırları seçin və klonlayın satır = arcpy.SearchCursor (LabelsLayer) horzLine.fontSize = rowHeight / 0.043 Lot_Cell.fontSize = rowHeight / 0.043 Landholder_Cell.fontSize = rowHeight / 0.043 ATW_Cell.fontSize = rowHeight / 0.043 Ass_sight_0843_ ell.fontSize = rowHeight / 0.043 Ass_Laar_Cell.fontSize = rowHeight / 0.043 Con_Start_Cell.fontSize = rowHeight / 0.043 Con_End_Cell.fontSize = rowHeight / 0.043 Con_Laar_Cell.fontSize = rowHeight / row43 / 0.043 numRecords> 0 olduqda: col1CellTxt = Lot_Cell.clone ("_ clone") col1CellTxt.text = row.getValue (unicode ("Constrained_Access.LOT_PLAN")) col1CellTxt.elementPositionX = Lot_CellX col1CellTxt.elementYosition "LAARs.Landholder")) əgər col2 Yoxdursa: col2text = "" elif col2 == "": col2text = "" else: col2text = row.getValue (unicode ("LAARs.Landholder")) col2CellTxt = Landholder_Cell.clone ( "_clone") col2CellTxt.text = col2text col2CellTxt.elementPositionX = Landholder_CellX col2CellTxt.elementPositionY = y col3 = row.getValue (unicode ("LAARs.ATW"))) col3 Yoxdursa: col3text = "" elif col3 = " col3text = "" else: col3text = row.getValue (unicode ("LAARs.ATW")) col3CellTxt = ATW_Cell.clone ("_ clone") c ol3CellTxt.text = col3text col3CellTxt.elementPositionX = ATW_CellX col3CellTxt.elementPositionY = y col4 = row.getValue (unicode ("LAARs.Approved_Assessment_Start")) col4 None: col4text = "=" col başqa: col4text = row.getValue (unicode ("LAARs.Approved_Assessment_Start")) col4CellTxt = Ass_Start_Cell.clone ("_ clone") col4CellTxt.text = col4text col4CellTxt.elementPositionX = Ass_Start_Cell "LAARs.Approved_Assessment_Finish")) əgər col5 Yoxdursa: col5text = "" elif col5 == "": col5text = "" else: col5text = row.getValue (unicode ("LAARs.Approved_Assessment_Finish")) col5ClTxt = "_clone") col5CellTxt.text = col5text col5CellTxt.elementPositionX = Ass_End_CellX col5CellTxt.elementPositionY = y col6 = row.getValue (unicode ("LAARs.Assessment_LAARs_reference_Number")) if col6 None: col6 = None col6text = "" else: col6text = row.getValue (unicode ("LAARs.Assessment _LAARs_reference_Number ")) col6CellTxt = Ass_Laar_Cell.clone (" _ clone ") col6CellTxt.text = col6text col6CellTxt.elementPositionX = Ass_Laar_CellX col6CellTxt.elementPositionY = y col7 = row.ppVovery = "" elif col7 == "": col7text = "" else: col7text = row.getValue (unicode ("LAARs.Approved_C Construction_Start")) col7CellTxt = Con_Start_Cell.clone ("_ clone") col7CellTxt.text = col7text col7Cell Con_Start_CellX col7CellTxt.elementPositionY = y col8 = row.getValue (unicode ("LAARs.Approved_C Construction_Finish"))) əgər col8 None: col8text = "" elif col8 == "": col8text = "" else: col8text = row.getVal ("LAARs.Approved_C İnşaat_Finiş")) col8CellTxt = Con_End_Cell.clone ("_ clone") col8CellTxt.text = col8text col8CellTxt.elementPositionX = Con_End_CellX col8CellTxt.elementPositionY = y col__real_Ar_A_A_A_A_A_A_A_A_A_A_A_%A%A%D%A%D%%%%%%%%%%%%%BD%B2 Yoxdur: col9text = "" e lif col9 == "": col9text = "" else: col9text = row.getValue (unicode ("LAARs.Cbuild_LAAR_reference_number")) col9CellTxt = Con_Laar_Cell.clone ("_ clone") col9CellTxt.text = col9text col9CarTxt_9 elementPositionY = y col10 = row.getValue (unicode ("LAARs.Land_Access_Notes")) col10 Yoksa: col10text = "" elif col10 == "": col10text = "" else: col10text = row.getValue (unicode ("LAARs .Land_Access_Notes ")) col10CellTxt = Notes_Cell.clone (" _ clone ") col10CellTxt.text = col10text col10CellTxt.elementPositionX = Notes_CellX col10CellTxt.elementPositionY = yy = y + rowHeight #Exre out (PDF dresh out) ( str (Çıxış) + "" + str (PackageName) + "Məhdudiyyətlər Maps.pdf" çap et "Səhifəni ixrac et:" + outputloc time.sleep (1) arcpy.mapping.ExportToPDF (mxd, outputloc, image_quality = "BETTER" , jpeg_compression_quality = 75,) print "Export Complete" # arcpy.mapping.ListLayoutElements (mxd, "GRAP) içindəki elm üçün növbəti səhifədən əvvəl təmizləyin. HIC_ELEMENT "," * clone * "): elm.delete () arcpy.mapping.ListLayoutElements (mxd," TEXT_ELEMENT "," * clone * ") içindəki qarağac üçün: elm.delete () del Outfolder del outputloc del y del PackageName del satırlar numRecords> 0: del col2 del col3 del col4 del col5 del col6 del col7 del col8 del col9 del col10 del col2text del col3text del col4text del col5text del col6text del col7text del col8text del col9text del col10text del col1CellTxt del col2Cellxt del col2te col4CellTxt del col5CellTxt del col6CellTxt del col7CellTxt del col8CellTxt del col9CellTxt del col10CellTxt del numRecords time.sleep (1) del outpath del LabelsLayer del mxd

Aldığım səhv:

İzləmə (son zəng son): "C:  Working  1. Dosyası. Layihə Tapşırıqları  Məhdudiyyətlər Xəritələri  Məhdudiyyətlər Xəritəsi - OW.py", sətir 224,  arcpy.mapping.ExportToPDF (mxd, outputloc, image_quality = "BETTER", jpeg_compression_quality = 75,) File "C:  Program Files (x86)  ArcGIS  Desktop10.3  ArcPy  arcpy  utils.py", line 182, fn_ return fn (* args, ** kw) "C:  Program Files (x86)  ArcGIS  Desktop10.3  ArcPy  arcpy  mapping.py" faylı, 1156-cı sıra, ExportToPDF layout.exportToPDF (* args) AttributeError: PageLayoutObject: ExportToPDF tətbiqində səhv

Aşağıdakı kod parçası ilə həll etdiyim bir yaddaş sızıntısı tipi problemi ilə qarşılaşdım, sonra "layout.exportToPDF (* args) AttributeError: PageLayoutObject: ExportToPDF-nin icrasında səhv" xətasına düşdüm və hələ də həll etmədim. Yaddaş sızıntısını necə keçdiyim (hər 100 hesabatda xəritə sənədini yenidən yükləyin):

TotalPages = (ReportMXD.dataDrivenPages.pageCount + 1) çap "Yaratılacaq hesabatların ümumi sayı:" + sıra (TotalPages) pageNum üçündür (1, TotalPages): əgər (pageNum% 100 == 0): çap "Yenidən açılır yaddaş sənədini boşaltmaq üçün xəritə sənədini ... "del ReportMXD ReportMXD = arcpy.mapping.MapDocument (ReportName) ReportMXD.dataDrivenPages.currentPageID = pageNum Destination =" c:  temp  reports  results  "+" LotID_ "+ str (ReportMXD.dataDrivenPages.pageRow.getValue ("LegalLots.LegalLotsTemp_ID_LOT")) + "_ServiceUtilitiesReport.pdf" print "Page" + str (pageNum) + "=>" + Destination arcpy.mapping.ExportToPg_x, Report "10") yaz "Hesabat yadda saxlanıldı ..." del ReportMXD

Məlumatı skriptinizi yerləşdirdiyiniz yer kimi qovluqlarda saxlayırsınızsaC: İşləyən 1. Layihə Tapşırıqları Məhdudiyyətlər Xəritələri Məhdudiyyətlər Xəritəsi - OW.py "onda düşünürəm ki, daha sadə yol adlarından istifadə edərək təcrübə etməlisinizC: tempbir test üçün.

Əgər o deyilsə, onda birmxd.save ()ya damxd.saveACopy ()sizindən əvvəlarcpy.mapping.ExportToPDF(və bunu şərh edin). Sonra PDF-ə ixrac et alətini skriptdə istifadə edəcəyiniz eyni parametrlərlə çalıştırın. Orada istifadə olunan hər hansı bir dəyişənin onları yazdıraraq düşündükləriniz olduğunu bir daha yoxladığınızdan əmin olun.

Alət eyni xətanı verirsə, skriptinizi problem kimi aradan qaldırdınız və əvəzinə alətə diqqət yetirə bilərsiniz.


Mən də sizin kimi bir problemlə qarşılaşdım. Uzun bir testdən sonra, arbit 32bit yaddaş sızıntısı olmalıdır. Rəsmi Background Geoprocessing proqramını (ArcGis versiyasına uyğun olaraq) yüklədim və qurdum. Python 64bit-i dəstəkləyir, məlumatları daha sürətli işləyir və məlumatların işlənməsi daha böyük ola bilər.


Videoya baxın: Using Data Driven Pages in ArcMap (Oktyabr 2021).