Harita öğelerini sayfa boyutundaki değişikliklerle orantılı olarak ölçeklendirmek için Python mu kullanıyorsunuz?


11

ArcPy ve ArcGIS 10.0 kullanarak farklı ofislerdeki MXD'lerin kaynaklarını değiştiriyorum. Görüldüğü gibi burada talimat mxd.save () gönderildiği zaman, yazıcı ayarları varsayılan yazıcıya döner.

Benim durumumda yazıcıyı kaybetmek küçük bir sorundur, ancak "Yazıcı Kağıt Ayarlarını Kullan" seçiliyken "Harita öğelerini sayfa boyutundaki değişikliklerle orantılı olarak ölçeklendir" yazdırma seçeneği işaretlenirse önemli hale gelir. Aşağıdaki ekran görüntüsü en kötü senaryom, en iyi durum her iki kutunun işaretini kaldırmak olacaktır.

resim açıklamasını buraya girin

  • MXD'yi kaydetmeden önce bu seçeneğin değerini kontrol etmek ve False (unicked) olarak ayarlamak için comtypes kullanmak istiyorum - fikir bunu mevcut bir ArcPy komut dosyasından bir işlev olarak çağırmaktır. (birincil hedef)

  • Yazdırma ayarlarını daha da güvenli hale getirmek için, ideal olarak, işaretlenmişse "Yazıcı ayarını kullan" kutusunun işaretini kaldırmak istiyorum. (ikincil hedef)

Biri yardım edebilir mi?

Yanıtlar:


13

Aşağıdaki SE Q / A'ya göre comtypes'i başarıyla kurduğunuzu varsayıyorum:

Pasaj:

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

Bu kod, etkin bir ArcMap oturumunda açılan bir mxd'nin özelliklerini güncellemek için özelleştirilebilir.


Teşekkürler Farid! Bu gerçekten çok umut verici görünüyor !! Ofisten uzaktayım ve kodunuzu Cuma günü test edebileceksiniz - Tabii ki sizi haberdar edeceğim. Tekrar teşekkürler!
Hélène

Sadece onaylamak için harika çalışıyor! Geçerli sayfa boyutunu okumanın mümkün olup olmadığını biliyor musunuz? Okumayı düşündükten sonra p.PutCustomSize () olarak uygulayarak her MXD için orijinal sayfa boyutunu koruyorum.
Hélène

1
Tabii, sadece (width,height)=p.QuerySize()kodu ekleyin ve p.PutCustomSize(width,height)uygun şekilde değiştirin . Güncellenmiş kod snippet'ine bakın!
Farid Cheraghi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.