Utiliser Python pour désactiver les éléments de la carte d'échelle proportionnellement aux changements de taille de page?

11

Je change de source sur les MXD dans différents bureaux en utilisant ArcPy et ArcGIS 10.0. Comme observé ici , les paramètres de l'imprimante reviennent à l'imprimante par défaut lorsque l'instruction mxd.save () est envoyée.

La perte de l'imprimante est un problème mineur dans mon cas, mais elle devient majeure si l'option d'impression "Mettre à l'échelle les éléments de la carte proportionnellement aux changements de taille de page" est cochée tandis que "Utiliser les paramètres du papier de l'imprimante" est sélectionné. La capture d'écran ci-dessous est mon pire scénario, le meilleur cas serait de décocher les deux cases à cocher.

entrez la description de l'image ici

  • Je voudrais utiliser des comtypes pour vérifier la valeur de cette option et la définir sur False (non cochée) avant d'enregistrer le MXD - l'idée est d'appeler cela en tant que fonction à partir d'un script ArcPy existant. (objectif principal)

  • Pour sécuriser davantage les paramètres d'impression, je voudrais aussi idéalement décocher la case "Utiliser les paramètres de l'imprimante" si elle est cochée. (objectif secondaire)

Quelqu'un peut-il aider?

Hélène
la source

Réponses:

13

Je suppose que vous avez installé les comtypes avec succès, selon les questions / réponses SE suivantes:

Fragment:

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()

Ce code peut être personnalisé pour mettre à jour les propriétés d'un mxd ouvert dans une session ArcMap active.

Farid Cheraghi
la source
Merci Farid! Cela semble vraiment très prometteur !! Je suis loin du bureau et je pourrai tester votre code vendredi après-midi - je vous tiendrai au courant bien sûr. Merci encore !!
Hélène
Juste pour confirmer, cela fonctionne très bien! Savez-vous s'il est possible de lire la taille de page actuelle? En pensant à le lire puis à l'appliquer en tant que p.PutCustomSize (), je conserve donc la taille de page d'origine pour chaque MXD.
Hélène
1
Bien sûr, ajoutez simplement (width,height)=p.QuerySize()le code et modifiez-le en p.PutCustomSize(width,height)conséquence. Voir l'extrait de code mis à jour!
Farid Cheraghi