Menggunakan Python untuk menonaktifkan elemen peta Skala secara proporsional dengan perubahan ukuran halaman?

11

Saya mengubah sumber pada MXD di kantor differents menggunakan ArcPy dan ArcGIS 10.0. Seperti yang diamati di sini , pengaturan printer kembali ke printer default ketika instruksi mxd.save () dikirim.

Kehilangan printer adalah masalah kecil dalam kasus saya, tetapi menjadi besar jika opsi cetak "Skala elemen peta secara proporsional dengan perubahan ukuran halaman" dicentang saat "Gunakan Pengaturan Kertas Printer" dipilih. Tangkapan layar di bawah ini adalah skenario terburuk saya, kasus terbaik adalah menghapus centang pada kedua kotak centang.

masukkan deskripsi gambar di sini

  • Saya ingin menggunakan comtypes untuk memeriksa nilai opsi itu dan mengaturnya menjadi False (tidak diikat) sebelum menyimpan MXD - idenya adalah memanggil ini sebagai fungsi dari skrip ArcPy yang ada. (tujuan utama)

  • Untuk mengamankan pengaturan cetak lebih lanjut, idealnya saya juga ingin menghapus centang pada kotak "Gunakan pengaturan printer" jika dicentang. (tujuan sekunder)

Adakah yang bisa membantu?

Hélène
sumber

Jawaban:

13

Saya berasumsi Anda telah menginstal comtypes dengan sukses, menurut SE T / A berikut:

Potongan:

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

Kode ini dapat dikustomisasi untuk memperbarui properti mxd yang dibuka di sesi ArcMap aktif.

Farid Cheraghi
sumber
Farid terima kasih! Ini memang terlihat sangat menjanjikan !! Saya jauh dari kantor, dan akan dapat menguji kode Anda Jumat malam - saya akan membuat Anda selalu diposting. Terima kasih lagi !!
Hélène
Hanya untuk mengonfirmasi, ini bekerja dengan baik! Apakah Anda tahu apakah mungkin untuk membaca ukuran halaman saat ini? Berpikir untuk membacanya lalu menerapkannya sebagai p.PutCustomSize (), jadi saya menjaga ukuran halaman asli untuk setiap MXD.
Hélène
1
Tentu, cukup tambahkan (width,height)=p.QuerySize()ke kode dan ubah p.PutCustomSize(width,height)sesuai. Lihat cuplikan kode yang diperbarui!
Farid Cheraghi