11 votos

Uso de Python para desactivar los elementos del mapa de escala proporcionalmente a los cambios en el tamaño de la página?

Estoy cambiando las fuentes en MXDs en diferentes oficinas utilizando ArcPy y ArcGIS 10.0. Según lo observado aquí La configuración de la impresora vuelve a ser la 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 convierte en mayor si la opción de impresión "Escala de los elementos del mapa proporcionalmente a los cambios en el tamaño de la página" está marcada mientras que la opción "Usar la configuración del papel de la impresora" está seleccionada. La captura de pantalla de abajo es mi peor escenario, el mejor caso sería desmarcar ambas casillas.

enter image description here

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

  • Para asegurar aún más la configuración de impresión, idealmente también me gustaría desmarcar la casilla "Usar la configuración de la impresora" si está marcada. (objetivo secundario)

¿Alguien puede ayudar?

13voto

Farid Cher Puntos 5306

Supongo que has instalado comtypes con éxito, de acuerdo con el siguiente SE Q/A:

Código

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 puede personalizarse para actualizar las propiedades de un mxd abierto en una sesión activa de ArcMap.

0 votos

¡Gracias Farid! ¡¡Esto parece muy prometedor!! Estoy fuera de la oficina, y podré probar tu código el viernes por la tarde - te mantendré informado por supuesto . ¡Mi agradecimiento de nuevo!

0 votos

Sólo para confirmarlo, ¡funciona muy bien! ¿Sabes si es posible leer el tamaño de la página actual? Estoy pensando en leerlo y luego aplicarlo como p.PutCustomSize(), así mantengo el tamaño de página original para cada MXD.

1 votos

Claro, simplemente añada (width,height)=p.QuerySize() al código y cambiar p.PutCustomSize(width,height) en consecuencia. Vea el fragmento de código actualizado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X