Використання Python для відключення елементів масштабної пропорції пропорційно змінам розміру сторінки?


11

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

Втрата принтера є незначною проблемою в моєму випадку, але вона стає основною, якщо встановлено галочку для параметра друку "Елементи масштабування пропорційно змінам розміру сторінки", коли вибрано "Використовувати параметри паперу принтера". Знимок екрана нижче - це мій найгірший сценарій, найкращим випадком буде зняття галочок з обох пунктів.

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

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

  • Щоб додатково захистити налаштування друку, в ідеалі я також хотів би зняти прапорець біля поля "Використовувати налаштування принтера", якщо воно встановлено. (вторинна мета)

Хтось може допомогти?

Відповіді:


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.


Дякую тобі Фариде! Це виглядає дуже перспективно! Я вдали від офісу і зможу перевірити ваш код у п’ятницю вечора - я, звісно, ​​буду вас публікувати. Дякую ще раз !!
Hélène

Тільки на підтвердження, це чудово працює! Чи знаєте ви, чи можна прочитати поточний розмір сторінки? Думаючи про читання, потім застосуйте його як p.PutCustomSize (), тому я зберігаю початковий розмір сторінки для кожного MXD.
Hélène

1
Впевнений, просто додати (width,height)=p.QuerySize()до коду та змінити p.PutCustomSize(width,height)відповідно. Дивіться оновлений фрагмент коду!
Фарид Черагі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.