Использование Python для отключения масштабирования элементов карты пропорционально изменениям размера страницы?

11

Я меняю источники на дисках MXD в разных офисах, используя ArcPy и ArcGIS 10.0. Как отмечалось здесь , настройки принтера возвращаются к принтеру по умолчанию при отправке инструкции mxd.save ().

Потеря принтера - это небольшая проблема в моем случае, но она становится серьезной, если опция печати «Масштабировать элементы карты пропорционально изменениям размера страницы» отмечена, когда выбрано «Использовать параметры бумаги для принтера». На скриншоте ниже показан мой худший сценарий, в лучшем случае снимите оба флажка.

введите описание изображения здесь

  • Я хотел бы использовать comtypes, чтобы проверить значение этой опции и установить его в False (без галочки) перед сохранением MXD - идея состоит в том, чтобы вызывать это как функцию из существующего скрипта ArcPy. (Главная цель)

  • Для дальнейшей защиты настроек печати, в идеале, я бы также хотел снять флажок «Использовать настройки принтера», если он установлен. (вторичная цель)

Кто-нибудь может помочь?

Hélène
источник

Ответы:

13

Я предполагаю, что вы успешно установили комтипы в соответствии со следующим SE Q / A:

Отрывок:

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

Этот код можно настроить для обновления свойств открытого mxd в активном сеансе ArcMap.

Фарид Чераги
источник
Спасибо тебе, Фарид! Это выглядит действительно многообещающе !! Я нахожусь вне офиса и смогу проверить ваш код в пятницу вечером - я буду держать вас в курсе, конечно. Еще раз спасибо!
Элен
Просто чтобы подтвердить, это прекрасно работает! Вы знаете, возможно ли прочитать текущий размер страницы? Подумав о чтении, затем применив его как p.PutCustomSize (), поэтому я сохраняю исходный размер страницы для каждого MXD.
Элен
1
Конечно, просто добавьте (width,height)=p.QuerySize()к коду и измените p.PutCustomSize(width,height)соответственно. Смотрите обновленный фрагмент кода!
Фарид Чераги