파이썬을 사용하여 페이지 크기의 변화에 ​​비례하여 스케일 맵 요소를 비활성화 하시겠습니까?


11

ArcPy 및 ArcGIS 10.0을 사용하여 다른 사무실의 MXD 소스를 변경하고 있습니다. 여기서 관찰 된 것처럼 mxd.save () 명령이 전송되면 프린터 설정이 기본 프린터로 되돌아갑니다.

필자의 경우 프린터를 잃어 버리는 것은 사소한 문제이지만 "프린터 용지 설정 사용"을 선택한 상태에서 "페이지 크기의 변화에 ​​비례하여 맵 요소 크기 조정"인쇄 옵션을 선택하면 문제가 발생합니다. 아래 스크린 샷은 최악의 시나리오이며, 가장 좋은 경우는 두 확인란을 모두 선택 취소하는 것입니다.

여기에 이미지 설명을 입력하십시오

  • MXD를 저장하기 전에 comtypes를 사용하여 해당 옵션의 값을 확인하고 False (선택하지 않음)로 설정하고 싶습니다. 기존 ArcPy 스크립트에서이를 함수로 호출하는 것이 좋습니다. (기본 목표)

  • 인쇄 설정을 더욱 안전하게하기 위해 "프린터 설정 사용"상자를 선택 해제하는 것이 이상적입니다. (보조 목표)

누구든지 도울 수 있습니까?

답변:


13

다음 SE Q / A에 따라 comtype을 성공적으로 설치했다고 가정합니다.

단편:

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! 이것은 정말로 매우 유망 해 보인다!! 나는 사무실에서 떨어져 있으며 금요일 오후에 코드를 테스트 할 수 있습니다. 물론 계속 게시하겠습니다. 다시 한번 감사합니다 !!
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.