¿Usa Python para deshabilitar los elementos del mapa de escala proporcionalmente a los cambios en el tamaño de página?

11

Estoy cambiando las fuentes de MXD en diferentes oficinas usando ArcPy y ArcGIS 10.0. Como se observa aquí , la configuración de la impresora vuelve a la impresora predeterminada cuando se envía la instrucción mxd.save ().

La pérdida de la impresora es un problema menor en mi caso, pero se vuelve importante si la opción de impresión "Escalar los elementos del mapa proporcionalmente a los cambios en el tamaño de la página" está marcada mientras se selecciona "Usar configuración de papel de la impresora". La captura de pantalla a continuación es mi peor de los casos, el mejor caso sería desmarcar ambas casillas.

ingrese la descripción de la imagen aquí

  • Me gustaría usar comtypes para verificar el valor de esa opción y establecerlo en False (sin marcar) antes de guardar el MXD; la idea es llamar a esto como una función de un script ArcPy existente. (objetivo principal)

  • Para asegurar aún más la configuración de impresión, lo ideal sería desmarcar la casilla "Usar configuración de impresora" si está marcada. (objetivo secundario)

¿Alguien puede ayudar?

Hélène
fuente

Respuestas:

13

Supongo que ha instalado los tipos correctamente, de acuerdo con las siguientes SE Q / A:

Retazo:

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

Este código se puede personalizar para actualizar las propiedades de un mxd abierto en una sesión activa de ArcMap.

Farid Cheraghi
fuente
Gracias Farid! ¡Esto parece muy prometedor! Estoy fuera de la oficina y podré probar su código el viernes por la tarde. Por supuesto, lo mantendré informado. ¡Gracias de nuevo!
Hélène
Solo para confirmar, ¡funciona muy bien! ¿Sabes si es posible leer el tamaño de página actual? Pensando en leerlo y luego aplicarlo como p.PutCustomSize (), así que mantengo el tamaño de página original para cada MXD.
Hélène
1
Claro, simplemente agregue (width,height)=p.QuerySize()al código y cambie en p.PutCustomSize(width,height)consecuencia. ¡Vea el fragmento de código actualizado!
Farid Cheraghi