Używasz Pythona do wyłączenia Skaluj elementy mapy proporcjonalnie do zmian rozmiaru strony?


11

Zmieniam źródła na dyskach MXD w różnych biurach, używając ArcPy i ArcGIS 10.0. Jak zaobserwowano tutaj , ustawienia drukarki powracają do domyślnej drukarki po wysłaniu instrukcji mxd.save ().

Utrata drukarki jest w moim przypadku drobnym problemem, ale staje się poważna, jeśli zaznaczona jest opcja drukowania „Skaluj elementy mapy proporcjonalnie do zmian rozmiaru strony”, gdy wybrana jest opcja „Użyj ustawień papieru drukarki”. Poniższy zrzut ekranu to mój najgorszy scenariusz, najlepszym rozwiązaniem byłoby odznaczenie obu pól wyboru.

wprowadź opis zdjęcia tutaj

  • Chciałbym użyć typów komend, aby sprawdzić wartość tej opcji i ustawić ją na False (niezaznaczone) przed zapisaniem MXD - chodzi o to, aby wywołać to jako funkcję z istniejącego skryptu ArcPy. (główny cel)

  • Aby dodatkowo zabezpieczyć ustawienia drukowania, najlepiej byłoby również odznaczyć pole „Użyj ustawień drukarki”, jeśli jest zaznaczone. (cel wtórny)

Czy ktoś może pomóc?

Odpowiedzi:


13

Zakładam, że pomyślnie zainstalowałeś typy com, zgodnie z następującym SE Q / A:

Skrawek:

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

Ten kod można dostosować, aby zaktualizować właściwości otwartego pliku MXD w aktywnej sesji ArcMap.


Dziękuję Farid! To naprawdę wygląda bardzo obiecująco !! Jestem poza biurem i będę mógł przetestować Twój kod w piątek po południu - oczywiście będę Cię informować. Jeszcze raz dziękuję !!
Hélène

Tylko dla potwierdzenia, działa świetnie! Czy wiesz, czy można odczytać bieżący rozmiar strony? Myśląc o przeczytaniu go, a następnie zastosowaniu go jako p.PutCustomSize (), więc zachowuję oryginalny rozmiar strony dla każdego MXD.
Hélène,

1
Jasne, po prostu dodaj (width,height)=p.QuerySize()do kodu i p.PutCustomSize(width,height)odpowiednio zmień . Zobacz zaktualizowany fragment kodu!
Farid Cheraghi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.