יותר

מאפיין דפים מונעי נתונים של ArcPy שגיאה: PageLayoutObject: שגיאה בביצוע ExportToPDF


אני מנסה לייצא סדרה של דפים המופעלים באמצעות נתונים. ביצוע בדף אחד לא קנס שום בעיה, ביצוע בכמה עמודים שום בעיה. מבצעת על עמודים רבים דרמה רצינית. בתחילה חשבתי שזה יכול להיות בעיה עם ה- mxd שלי (תגובת ESRI) אבל אם אני מבצע את הסקריפט בדף שבו נכשל לאחרונה (באמצעות שאילתת הגדרה באינדקס) עובד בסדר.

ההנחה שלי הייתה בעיית זיכרון או פסק זמן לתפקוד הייצוא ל- pdf.

ייבא arcpy, זמן #Reference MXD ושכבות mxd = arcpy.mapping.MapDocument (r "C:  Working  1. משימות פרוייקט  Constraints Maps  Constraints Maps - OW.mxd") LabelsLayer = arcpy.mapping.ListLayers (mxd, "תוויות") [0] outpath = "C:  אילוצים " # arcpy.GetParameterAsText (0) # רכיבי פריסת עמוד התייחסות עבור בוקיצה ב arcpy.mapping.ListLayoutElements (mxd): if elm.name == "horzLine ": horzLine = בוקיצה אם בוקיצה.שם ==" Lot_Cell ": Lot_Cell = בוקיצה אם בוקע.שם ==" מחזיק בקרקע ": בעל קרקע_בית = בוקיצה אם בוקיצה.שם ==" ATW_Cell ": ATW_Cell = בוקיצה אם שם בוקע == "Ass_Start_Cell": Ass_Start_Cell = בוקיצה אם בוקיצה.שם == "Ass_End_Cell": Ass_End_Cell = בוקיצה אם בוקע.שם == "Ass_Laar_Cell": Ass_Laar_Cell = בוקיצה אם שם בקו == "Con_Start_Cell": Con_Start_m. == "Con_End_Cell": Con_End_Cell = בוקיצה אם בוקיצה.name == "Con_Laar_Cell": Con_Laar_Cell = בוקיצה אם בוקיצה. .name == "כותרת": כותרת = בוקיצה אם בוקיצה.שם == "שוליים_טקסט": Margin_Text = elm.name == "Data_Frame": Data_Frame = elm.name == "vertLines": vertLines = elm # הפניה DDP אובייקט ddp = mxd.dataDrivenPages ddp.refresh () # ערכי משתנה טבלה גרפית maxtableHeight = 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 דרך כל דף DDP עבור pageNum בטווח (1, mxd.dataDrivenPages.pageCount + 1): mxd.dataDrivenPages.currentPageID = pageNum #Build select set Outfolder = ddp.pageRow.Region PackageName = ddp.pageRow.Page_Name numRecords = int (arcpymanagement.GetC) .getOutput (0)) הדפסת str (PackageName) + "מספר מאפיינים:" + str (numRecords) # אם מספר השורות עולה על שטח הדף, שנה את גודל גובה השורה אם מספרRecords> 20: rowHeight = maxtableHeight / numRecord s Data_Frame.elementHeight = 22.0 Margin_Text.elementHeight = 6.6 vertLines.elementHeight = 6 MPC_LOGO.elementPositionY = 7.3 Header.elementPositionY = 6.7 אחר: rowHeight = 0.3 Data_Frame.elementHeight = (28.3 - (numRecelent_Height = 0.3) - (numRecords * 0.3)) vertLines.elementHeight = (numRecords * 0.3) MPC_LOGO.elementPositionY = (1 + (numRecords * 0.3)) Header.elementPositionY = (0.4 + (numRecords * 0.3)) # הגדר ושכפל קו אופקי לעבוד horzLine .elementWidth = tableWidth horzLine.elementPositionX = horzLineX horzLine.elementPositionY = upperY y = upperY עבור הורץ בטווח (1, numRecords + 1): y = y + rowHeight temp_horz = horzLine.clone ("_ clone") temp_horz.elementPositionY = הגדר ושכפל שורות אלמנטים טקסטיים של התא = 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_Startize_Cell.font 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 / 0.043 Notes_Cell.fontS = שורה if numRecords> 0: col1CellTxt = Lot_Cell.clone ("_ clone") col1CellTxt.text = row.getValue (unicode ("Constrained_Access.LOT_PLAN")) col1CellTxt.elementPositionX = Lot_CellX col1CellTxt.elementPositionY = y = col. "LAARs.Landholder")) אם col2 אינו: col2text = "" elif col2 == "": col2text = "" אחר: 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 אינו: 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 אינו: col4text = "" elif col4 = = "" אחרת: col4text = row.getValue (unicode ("LAARs.Approved_Assessment_Start")) col4CellTxt = Ass_Start_Cell.clone ("_ clone") col4CellTxt.text = col4text col4CellTxt.elementPositionX = Ass_Start_CellX col4Cellxt. "LAARs.Approved_Assessment_Finish")) אם col5 אינו: col5text = "" elif col5 == "": col5text = "" אחר: col5text = row.getValue (unicode ("LAARs.Approved_Assessment_Finish")) col5CellTxt = Ass_End_Cell.cl "_clone") col5CellTxt.text = col5text col5CellTxt.elementPositionX = Ass_End_CellX col5CellTxt.elementPositionY = y col6 = row.getValue (unicode ("LAARs.Assessment_LAARs_reference_Number")) if col6 is no: coliftext = " 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.getValue (unicode_tool = = "" elif col7 == "": col7text = "" אחר: col7text = row.getValue (unicode ("LAARs.Approved_Construction_Start")) col7CellTxt = Con_Start_Cell.clone ("_ clone") col7CellTxt.text = col7text col7CellTxt.elP Con_Start_CellX col7CellTxt.elementPositionY = y col8 = row.getValue (unicode ("LAARs.Approved_Construction_Finish")) אם col8 אינו: col8text = "" elif col8 == "": col8text = "" אחר: col8text = row.getValue (unic ("LAARs.Approved_Construction_Finish")) col8CellTxt = Con_End_Cell.clone ("_ clone") col8CellTxt.text = col8text col8CellTxt.elementPositionX = Con_End_CellX col8CellTxt.elementPositionY = y col9 = row.getal. הוא ללא: col9text = "" ה lif col9 == "": col9text = "" אחר: col9text = row.getValue (unicode ("LAARs.Construction_LAAR_reference_number")) col9CellTxt = Con_Laar_Cell.clone ("_ clone") col9CellTxt.text = col9text col9CellTxt.elementPosition. elementPositionY = y col10 = row.getValue (unicode ("LAARs.Land_Access_Notes")) אם col10 אינו: col10text = "" elif col10 == "": col10text = "" אחר: 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 #Export to PDF ddp.lpres = str (Outfolder) + "" + str (PackageName) + "אילוצים Maps.pdf" הדפס "דף מייצא:" + outputloc time.sleep (1) arcpy.mapping.ExportToPDF (mxd, outputloc, image_quality = "BETTER" , jpeg_compression_quality = 75,) הדפס "ייצוא הושלם" # ניקוי לפני העמוד הבא עבור בוקיצה ב arcpy.mapping.ListLayoutElements (mxd, "GRAP HIC_ELEMENT "," * clone * "): elm.delete () עבור elm ב arcpy.mapping.ListLayoutElements (mxd," TEXT_ELEMENT "," * clone * "): elm.delete () del Outfolder del outputloc del y del PackageName del שורות אם מספר רשומות> 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 col2CellTxt del col3CellTxt del col4CellTxt del col5CellTxt del col6CellTxt del col7CellTxt del col8CellTxt del col9CellTxt del col10CellTxt del numRecords time.sleep (1) del outpath del LabelsLayer del mxd

השגיאה שאני ממשיך לקבל היא:

עקיבה אחרונה (השיחה האחרונה האחרונה): קובץ "C:  עבודה  1. משימות פרויקט  אילוצים מפות  מפת אילוצים - OW.py", שורה 224, ב  arcpy.mapping.ExportToPDF (mxd, outputloc, image_quality = "BETTER", jpeg_compression_quality = 75,) קובץ "C:  Program Files (x86)  ArcGIS  Desktop10.3  ArcPy  arcpy  utils.py", שורה 182, ב- fn_ להחזיר fn (* args, ** kw) קובץ "C:  Program Files (x86)  ArcGIS  Desktop10.3  ArcPy  arcpy  mapping.py", שורה 1156, ב- ExportToPDF layout.exportToPDF (* args) AttributeError: PageLayoutObject: שגיאה בביצוע ExportToPDF

נתקלתי בבעיה מסוג דליפת זיכרון שפתרתי עם קטע הקוד למטה, ואז נתקלתי בשגיאת "layout.exportToPDF (* args) AttributeError: PageLayoutObject: שגיאה בביצוע ExportToPDF", ועדיין לא פתרתי אותה. כך עקפתי את דליפת הזיכרון (טען מחדש את מסמך המפה כל 100 דוחות):

TotalPages = (ReportMXD.dataDrivenPages.pageCount + 1) הדפס "מספר הדוחות הכולל שייווצר:" + str (TotalPages) לדף מספר בטווח (1, TotalPages): אם (pageNum% 100 == 0): הדפס "פתיחה מחדש מיפה מסמך כדי לפנות זיכרון ... "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" הדפס "עמוד" + str (pageNum) + "=>" + יעד arcpy.mapping.ExportToPDF (ReportMXpp, יעד "10") הדפס "דוח שמירת סיום…" del ReportMXD

אם אתה שומר נתונים בתיקיות כמו שנראה שהנחת את הסקריפט שלךC: עבודה 1. משימות פרויקט אילוצים מפות מפת אילוצים - OW.py "אז אני חושב שאתה צריך להתנסות באמצעות שמות דרך פשוטים יותר כמוC: tempלמבחן.

אם זה לא זה, אני חושב שאתה צריך לכלולmxd.save ()אוmxd.saveACopy ()לפני שלךarcpy.mapping.ExportToPDF(ולהגיב על זה). לאחר מכן נסה להפעיל את הכלי ייצוא ל- PDF עם אותם פרמטרים בדיוק שבהם היית משתמש בסקריפט. הקפד לבדוק שוב כי כל המשתנים המשמשים שם הם מה שאתה חושב על ידי הדפסתם.

אם הכלי נותן את אותה השגיאה, ביטלת את הסקריפט שלך כבעיה ותוכל להתמקד בכלי במקום זאת.


נתקלתי גם בבעיה דומה לשלך. לאחר בדיקה ארוכה, זו צריכה להיות דליפת זיכרון של 32 ביט בקשת. הורדתי והתקנתי את התוכנית הרשמית רקע גיאוגרפי (המתאים לגרסת ArcGis). הוא תומך בפייתון 64 ביט, עיבוד נתונים מהיר יותר ועיבוד נתונים יכול להיות גדול יותר.


צפו בסרטון: GIS Tools: ArcMapArcGIS Tool for connecting points (אוֹקְטוֹבֶּר 2021).