Sử dụng Python để vô hiệu hóa các thành phần bản đồ tỷ lệ với các thay đổi về kích thước trang?


11

Tôi đang thay đổi nguồn trên MXD trong các văn phòng khác nhau bằng ArcPy và ArcGIS 10.0. Theo quan sát ở đây , cài đặt máy in trở lại máy in mặc định khi lệnh mxd.save () được gửi.

Mất máy in là một vấn đề nhỏ trong trường hợp của tôi, nhưng nó sẽ trở thành vấn đề lớn nếu tùy chọn in "Tỷ lệ thành phần bản đồ tỷ lệ với thay đổi kích thước trang" được chọn trong khi "Sử dụng Cài đặt giấy máy in" được chọn. Ảnh chụp màn hình bên dưới là trường hợp xấu nhất của tôi, trường hợp tốt nhất sẽ bỏ chọn cả hai hộp đánh dấu.

nhập mô tả hình ảnh ở đây

  • Tôi muốn sử dụng comtypes để kiểm tra giá trị của tùy chọn đó và đặt thành Sai (chưa sử dụng) trước khi lưu MXD - ý tưởng là gọi đây là một hàm từ tập lệnh ArcPy hiện có. (mục tiêu chính)

  • Để bảo mật các cài đặt in hơn nữa, lý tưởng nhất là tôi muốn bỏ chọn hộp "Sử dụng cài đặt máy in" nếu nó được chọn. (mục tiêu phụ)

Có ai giúp được không?

Câu trả lời:


13

Tôi giả sử bạn đã cài đặt comtypes thành công, theo Q / A sau đây:

Đoạn trích:

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

Mã này có thể được tùy chỉnh để cập nhật các thuộc tính của mxd đã mở trong phiên ArcMap đang hoạt động.


Cảm ơn bạn Farid! Điều này có vẻ rất hứa hẹn thực sự !! Tôi đi khỏi văn phòng, và sẽ có thể kiểm tra mã của bạn vào chiều thứ Sáu - tất nhiên tôi sẽ giữ cho bạn được đăng. Cảm ơn một lần nữa !!
Hélène

Chỉ cần xác nhận, nó hoạt động rất tốt! Bạn có biết nếu có thể te đọc kích thước trang hiện tại? Suy nghĩ về việc đọc nó sau đó áp dụng nó dưới dạng p.PutCustomSize (), vì vậy tôi giữ kích thước trang gốc cho mỗi MXD.
Hélène

1
Chắc chắn, chỉ cần thêm (width,height)=p.QuerySize()vào mã và thay đổi cho p.PutCustomSize(width,height)phù hợp. Xem đoạn mã được cập nhật!
Farid Cheraghi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.