Usando o Python para desativar os elementos do mapa de escala proporcionalmente às alterações no tamanho da página?

11

Estou mudando as fontes nos MXDs em diferentes escritórios usando o ArcPy e o ArcGIS 10.0. Conforme observado aqui , as configurações da impressora retornam à impressora padrão quando a instrução mxd.save () é enviada.

Perder a impressora é um problema menor no meu caso, mas se torna maior se a opção de impressão "Escalar elementos do mapa proporcionalmente às alterações no tamanho da página" estiver marcada enquanto a opção "Usar configurações de papel da impressora" estiver selecionada. A captura de tela abaixo é o meu pior cenário, o melhor seria desmarcar as duas caixas de seleção.

insira a descrição da imagem aqui

  • Gostaria de usar comtypes para verificar o valor dessa opção e defini-lo como False (desmarcado) antes de salvar o MXD - a idéia é chamar isso como uma função de um script ArcPy existente. (objetivo principal)

  • Para proteger ainda mais as configurações de impressão, eu também gostaria de desmarcar a caixa "Usar configuração da impressora" se estiver marcada. (objetivo secundário)

Alguém pode ajudar?

Hélène
fonte

Respostas:

13

Suponho que você instalou comtypes com êxito, de acordo com o seguinte SE Q / A:

Snippet:

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

Esse código pode ser customizado para atualizar as propriedades de um mxd aberto em uma sessão ativa do ArcMap.

Farid Cheraghi
fonte
Obrigado Farid! Isso parece muito promissor! Estou ausente do escritório e poderei testar seu código na sexta-feira à noite - manterei você informado, é claro. Meus agradecimentos novamente !!
Hélène
Só para confirmar, funciona muito bem! Você sabe se é possível ler o tamanho da página atual? Pensando em lê-lo e aplicá-lo como p.PutCustomSize (), então mantenho o tamanho da página original para cada MXD.
Hélène
1
Claro, basta adicionar (width,height)=p.QuerySize()ao código e alterar de p.PutCustomSize(width,height)acordo. Veja o snippet de código atualizado!
Farid Cheraghi