Usando Python per disabilitare Ridimensiona gli elementi della mappa in modo proporzionale alle modifiche alle dimensioni della pagina?


11

Sto cambiando le fonti su MXD in uffici diversi usando ArcPy e ArcGIS 10.0. Come osservato qui , le impostazioni della stampante tornano alla stampante predefinita quando viene inviata l'istruzione mxd.save ().

Perdere la stampante è un problema minore nel mio caso, ma diventa importante se l'opzione di stampa "Ridimensiona gli elementi della mappa proporzionalmente alle modifiche alle dimensioni della pagina" è selezionata mentre è selezionata l'opzione "Usa impostazioni carta della stampante". Lo screenshot qui sotto è il mio scenario peggiore, il caso migliore sarebbe deselezionare entrambe le caselle di spunta.

inserisci qui la descrizione dell'immagine

  • Vorrei usare i comtypes per verificare il valore di quell'opzione e impostarlo su False (non selezionato) prima di salvare l'MXD - l'idea è di chiamarlo come una funzione da uno script ArcPy esistente. (obbiettivo primario)

  • Per proteggere ulteriormente le impostazioni di stampa, idealmente desidero anche deselezionare la casella "Usa impostazioni stampante" se è selezionata. (obiettivo secondario)

Qualcuno può aiutare?

Risposte:


13

Presumo che tu abbia installato con successo i comtypes, secondo il seguente Q / A SE:

Frammento:

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

Questo codice può essere personalizzato per aggiornare le proprietà di un mxd aperto in una sessione ArcMap attiva.


Grazie Farid! Sembra davvero molto promettente !! Sono lontano dall'ufficio e sarò in grado di testare il tuo codice venerdì pm - ti terrò informato ovviamente. Grazie ancora !!
Hélène,

Solo per confermare, funziona benissimo! Sai se è possibile leggere le dimensioni della pagina corrente? Pensando di leggerlo e applicarlo come p.PutCustomSize (), quindi mantengo le dimensioni della pagina originale per ogni MXD.
Hélène,

1
Certo, aggiungi semplicemente (width,height)=p.QuerySize()il codice e cambia di p.PutCustomSize(width,height)conseguenza. Vedi lo snippet di codice aggiornato!
Farid Cheraghi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.