Verwenden Sie Python, um Kartenelemente proportional zu Änderungen der Seitengröße zu deaktivieren?

11

Ich ändere Quellen auf MXDs in verschiedenen Büros mit ArcPy und ArcGIS 10.0. Wie hier zu sehen ist , werden die Druckereinstellungen auf den Standarddrucker zurückgesetzt, wenn die Anweisung mxd.save () gesendet wird.

Der Verlust des Druckers ist in meinem Fall ein kleines Problem, wird jedoch schwerwiegend, wenn die Druckoption "Kartenelemente proportional zu Änderungen der Seitengröße skalieren" aktiviert ist, während "Druckerpapiereinstellungen verwenden" ausgewählt ist. Der Screenshot unten ist mein Worst-Case-Szenario. Der beste Fall wäre, beide Kontrollkästchen zu deaktivieren.

Geben Sie hier die Bildbeschreibung ein

  • Ich möchte comtypes verwenden, um den Wert dieser Option zu überprüfen und ihn auf False (deaktiviert) zu setzen, bevor die MXD gespeichert wird. Die Idee ist, dies als Funktion aus einem vorhandenen ArcPy-Skript aufzurufen. (Hauptziel)

  • Um die Druckeinstellungen weiter zu sichern, möchte ich im Idealfall auch das Kontrollkästchen "Druckereinstellung verwenden" deaktivieren, wenn es aktiviert ist. (sekundäres Ziel)

Kann jemand helfen?

Hélène
quelle

Antworten:

13

Ich gehe davon aus, dass Sie comtypes gemäß den folgenden SE Q / A erfolgreich installiert haben:

Ausschnitt:

import arcpy
from snippets102 import *
from comtypes.client import GetModule, CreateObject

import comtypes.gen.esriFramework as esriFramework
import comtypes.gen.esriArcMapUI as esriArcMapUI
import comtypes.gen.esriCarto as esriCarto

pMapDoc = CreateObject(esriCarto.MapDocument, interface=esriCarto.IMapDocument)
path = r'D:\my.mxd'
pMapDoc.Open(path)
pageLayoutActiveView = CType(pMapDoc.PageLayout,esriCarto.IActiveView)


p = pMapDoc.PageLayout.Page

#unchecking "Scale map elements proportionally to changes in page size"
p.StretchGraphicsWithPage = False

#setting the size manually suppresses the default behaviour of "Use Printer Paper Settings"
(width,height)=p.QuerySize()
p.Units=1 #1 is for Inches
p.PutCustomSize(width,height) #sizez of a4

pMapDoc.Save()

Dieser Code kann angepasst werden, um die Eigenschaften eines geöffneten mxd in einer aktiven ArcMap-Sitzung zu aktualisieren.

Farid Cheraghi
quelle
Danke Farid! Das sieht in der Tat sehr vielversprechend aus !! Ich bin nicht im Büro und kann Ihren Code am Freitag nachmittags testen - ich werde Sie natürlich auf dem Laufenden halten. Nochmals vielen Dank !!
Hélène
Nur um zu bestätigen, es funktioniert super! Wissen Sie, ob es möglich ist, die aktuelle Seitengröße zu lesen? Denken Sie darüber nach, es zu lesen und dann als p.PutCustomSize () anzuwenden, damit ich die ursprüngliche Seitengröße für jede MXD behalte.
Hélène
1
Sicher, einfach (width,height)=p.QuerySize()zum Code hinzufügen und entsprechend ändern p.PutCustomSize(width,height). Siehe das aktualisierte Code-Snippet!
Farid Cheraghi