使用Python禁用Scale map元素与页面大小的变化成比例吗?


11

我正在使用ArcPy和ArcGIS 10.0在不同办公室的MXD上更改源。正如所观察到这里,打印机设置恢复到默认打印机时发送指令mxd.save()。

在我的情况下,丢失打印机是一个小问题,但是如果在选择“使用打印机纸张设置”时勾选了打印选项“按比例缩放地图元素与页面大小成比例地缩放”,则打印机将变得很重要。下面的屏幕截图是我最坏的情况,最好的情况是取消选中两个复选框。

在此处输入图片说明

  • 在保存MXD之前,我想使用comtypes来检查该选项的值并将其设置为False(未选中)-想法是从现有ArcPy脚本中将此函数作为函数来调用。(首要目标)

  • 为了进一步保证打印设置的安全性,我也希望取消选中“使用打印机设置”复选框。(次要目标)

有人可以帮忙吗?

Answers:


13

根据以下SE Q / A,我假设您已经成功安装了comtypes:

片段:

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

可以自定义此代码以更新活动ArcMap会话中打开的mxd的属性。


谢谢你,法里德!这看起来确实非常有前途!!我不在办公室,可以在星期五下午测试您的代码-当然,我会及时通知您。再次感谢!
赫莲(Hélène)

只是为了确认,它很棒!您知道是否可以读取当前页面尺寸吗?考虑阅读它,然后将其应用为p.PutCustomSize(),因此我保留了每个MXD的原始页面大小。

1
当然,只需将其添加(width,height)=p.QuerySize()到代码中并进行相应的更改p.PutCustomSize(width,height)。查看更新的代码段!
Farid Cheraghi,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.