ใช้ Python เพื่อปิดใช้งานการปรับขนาดองค์ประกอบแผนที่ตามการเปลี่ยนแปลงขนาดหน้าหรือไม่


11

ฉันกำลังเปลี่ยนแหล่งที่มาบน MXD ในสำนักงาน differents โดยใช้ ArcPy และ ArcGIS 10.0 ดังที่สังเกตที่นี่การตั้งค่าเครื่องพิมพ์จะเปลี่ยนกลับไปเป็นเครื่องพิมพ์เริ่มต้นเมื่อส่งคำสั่ง mxd.save ()

การสูญเสียเครื่องพิมพ์เป็นปัญหาเล็กน้อยในกรณีของฉัน แต่จะกลายเป็นสิ่งสำคัญหากตัวเลือกการพิมพ์ "ปรับขนาดองค์ประกอบแผนที่ตามสัดส่วนการเปลี่ยนแปลงขนาดหน้า" ถูกเลือกในขณะที่เลือก "ใช้การตั้งค่ากระดาษของเครื่องพิมพ์" ภาพหน้าจอด้านล่างเป็นสถานการณ์ที่เลวร้ายที่สุดของฉันกรณีที่ดีที่สุดคือการยกเลิกการทำเครื่องหมายที่กล่องทั้งคู่

ป้อนคำอธิบายรูปภาพที่นี่

  • ฉันต้องการใช้ comtypes เพื่อตรวจสอบค่าของตัวเลือกนั้นและตั้งค่าเป็นเท็จ (ไม่ถูกต้อง) ก่อนบันทึก MXD - แนวคิดคือเรียกสิ่งนี้ว่าเป็นฟังก์ชันจากสคริปต์ ArcPy ที่มีอยู่ (เป้าหมายหลัก)

  • เพื่อรักษาความปลอดภัยการตั้งค่าการพิมพ์ต่อไปฉันต้องการยกเลิกการเลือกช่อง "ใช้การตั้งค่าเครื่องพิมพ์" หากมีการทำเครื่องหมาย (เป้าหมายรอง)

ใครช่วยได้บ้าง

คำตอบ:


13

ฉันถือว่าคุณติดตั้ง comtypes สำเร็จแล้วตาม SE Q / A ต่อไปนี้:

ตัวอย่างข้อมูล:

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

รหัสนี้สามารถปรับแต่งเพื่อปรับปรุงคุณสมบัติของ mxd ที่เปิดอยู่ในเซสชัน ArcMap ที่ใช้งานอยู่


ขอบคุณ Farid! นี่มันดูมีแนวโน้มมากจริงๆ !! ฉันไม่อยู่ที่สำนักงานและจะสามารถทดสอบรหัสของคุณในวันศุกร์เวลาบ่ายโมง - ฉันจะแจ้งให้คุณทราบถึงการโพสต์ ขอบคุณอีกครั้ง !!
Hélène

เพียงเพื่อยืนยันว่าใช้งานได้ดี! คุณรู้หรือไม่ถ้าเป็นไปได้อ่านขนาดหน้าปัจจุบัน? คิดเกี่ยวกับการอ่านแล้วใช้มันเป็น p.PutCustomSize () ดังนั้นฉันจะรักษาขนาดหน้าต้นฉบับสำหรับ MXD แต่ละรายการ
Hélène

1
แน่นอนว่าเพียงเพิ่ม(width,height)=p.QuerySize()รหัสและเปลี่ยนแปลงp.PutCustomSize(width,height)ตามนั้น ดูตัวอย่างโค้ดที่อัปเดต!
Farid Cheraghi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.