Використання 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.