Pythonを使用して、ページサイズの変化に比例してスケールマップ要素を無効にしますか?


11

ArcPyとArcGIS 10.0を使用して、さまざまなオフィスのMXDのソースを変更しています。ここで見たように、命令mxd.save()が送信されると、プリンター設定はデフォルトのプリンターに戻ります。

私の場合、プリンターの紛失は軽微な問題ですが、「プリンターの用紙設定を使用」が選択されているときに「ページサイズの変化に比例してマップ要素を拡大縮小する」印刷オプションにチェックを入れると重大になります。以下のスクリーンショットは私の最悪のシナリオであり、最良のケースは両方のチェックボックスをオフにすることです。

ここに画像の説明を入力してください

  • MXDを保存する前に、comtypesを使用してそのオプションの値を確認し、False(チェックなし)に設定したいと考えています-これは、既存のArcPyスクリプトから関数として呼び出すことです。(主な目標)

  • 印刷設定をさらに保護するために、[プリンタ設定を使用する]チェックボックスがオンになっている場合はオフにすることも理想的です。(二次目標)

誰でも助けることができますか?

回答:


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のプロパティを更新できます。


ありがとう、Farid!これは確かに非常に有望に見えます!! 私はオフィスを離れていて、金曜日の午後にあなたのコードをテストすることができます-もちろんあなたに投稿し続けます。再びありがとう!
エレーヌ

確認するだけで、うまくいきます!現在のページサイズを読むことが可能かどうか知っていますか?それを読んでp.PutCustomSize()として適用することを考えて、各MXDの元のページサイズを維持します。
エレーヌ

1
確かに、単に(width,height)=p.QuerySize()コードを追加し、p.PutCustomSize(width,height)それに応じて変更します。更新されたコードスニペットをご覧ください!
ファリドチェラギ16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.