mehrere layouts drucken

Hallo zusammen,
gibt es eine Möglichkeit mehrere Layouts auf einmal zu drucken? Ich hatte mir vorgestellt, dass wenn ich mehrere Layouts makiere und dann auf Drucken (in Datei schreiben) mir mehrere Layouts in eine Datei geschrieben werden. Es kommt aber immer nur die erste Datei "an".????

roland
Hallo Roland,

Mehrfachausdrucke sind ueber folgende Avenue-Zeilen moeglich:

' Name: multiplot.simple
Printer.The.Setup

theLayout1 = av.FindDoc("Layout1")
theLayout1.Print

theLayout2 = av.FindDoc("Layout2")
theLayout2.Print

Falls du mehrere Ausdrucke ueber einen Plotter durchfuehren moechtest, koenntest du hiermit jedoch Speicherprobkeme bekommen. Zu deiner Frage siehe daher auch:

Mehrfachausdrucken aus ArcView

Das etwas laengere Skript druckt alle Layouts, deren Name mit einem Unterstrich beginnt, im Abstand von X Minuten. Dabei ist die Anzahl der Minuten frei waehlbar.

Gruss

Uwe
Hallo Uwe,
wie funktioniert das mit der Druckerauswahl? Wenn ich diese in ArcView einstelle, dann schickt er die Druckaufträge automatisch an die richtige Druckeradresse? Wenn ich in eine Datei drucken möchte wäre das damit auch abgehandelt?

roland
Hello again,

meines Wissens kannst du die Datei, in die du schreiben moechtest, ueber folgende Zeile definieren:

Printer.The.SetFileName ("C:\Layout1.dat".AsFilename)

Diese Zeile muesste dann wohl vor jedem Print-Befehl stehen.

Um den Ausdruck in eine Datei umzuleiten, musst du am Anfang des Skriptes den Print-Dialog aufrufen:

intResult = Printer.The.Edit({"Meine Layouts"})

If (intResult <> 0) then
Return Nil
End


Gruss und viel Erfolg

Uwe
Hallo Uwe,
ich habe das mit dem Schreiben in die Datei soweit ans laufen gebracht. Ich habe nur noch das Problem, das alle Layouts in die gleiche Datei geschrieben werden. Wenn ich also drei Layouts auswähle schreibt mein script die einzelnen Layouts in eine Datei überschreibt sie aber dann gleich wieder, sodass ich nur das letzte Layout als ps vorliegen habe.

Wie könnte ich das ändern?

roland
Hallo Roland,

hast du fuer jeden Ausdruck den Dateinamen gesetzt? Enthaelt dein Skript also folgende Zeilen:

Printer.The.SetFileName ("C:\Layout1.dat".AsFilename)
:
Printer.The.SetFileName ("C:\Layout2.dat".AsFilename)
:
Printer.The.SetFileName ("C:\Layout3.dat".AsFilename)

Wenn ja, dann wuesste ich gerne, in welcher Datei (erste oder letzte) deine Ausdrucke landen. Der Vollstaendigkeit halber waere dein aktuelles Skript interessant zu lesen.

Gruss

Uwe
Hallo Uwe,
naja, ich glaube ich bin da einen anderen Weg gegangen (Script von Jamie Love). Ich habe mir bisher so geholfen, dass ich die "gewählte" Pause dazu verwende die Dateien im Explorer direkt umzubenenen. Funktioniert ist aber ein wenig lästig da man bei dem Prozess immer anwesend sein muss, da ja sonst die Datei überschrieben wird.

'(: (; !: O:
'written by Jamie Love, originaly for printing multiple layouts.
'in AV R3.1, should run on other R's of AV.
'feel free to modify, distribute, add to extension as long as this header (or refrence to) remains.
'very simple script written very quickly.
'prints documents of specified type and containing a specified string with a delay between each one.
'very easy to use, can be run from script, or from any document window.
'loads the print setup dialog when first run.
'asks for the doc type, containing string and a delay.
'I accept no responsability for any consequences from using this script.
'please acknowledge the author if using this script, I would acknowledge you.

'runs the print setup

intResult = Printer.The.Edit({"Layoutdruck"})
If (intResult <> 0) then
Return Nil
end

'gets a list of docs
alist = av.getproject.getdocs

'get a class type
aclass = msgbox.listasstring({"Layout","View","Table","Chart","Script"},
"Select a document type to print.",
"Print Multiple Documents")
if (aclass = nil) then
exit
end
'get a text string
astring = msgbox.input ("Only"++aclass+"'s who's name contains the following text will be printed."+NL+
"Please enter a text string (Leave blank to print all"++aclass+"'s).",
"Print Multiple"++aclass+"'s"," ")
if (astring = nil) then
exit
end

'get a delay time
adelay = msgbox.input("Please enter a delay time in seconds"+NL+"for each print job.",
"Print Multiple"++aclass+"'s containing"++astring,"0")
if (adelay = nil) then
exit
end

'convert delay time from string to number
adelaytime = adelay.asnumber

for each i in alist
ac = i.getclass
if (ac.getclassname = aclass) then
if (astring = " ") then
i.print
'used for testing
'msgbox.info(i.AsString,"")
adate = date.now
bdate = adate + adelaytime.AsSeconds
cdate = adate
while (cdate < bdate)
cdate = date.now
end
elseif (i.getname.contains(astring)) then
'used for testing
'msgbox.info(i.AsString,"")
i.print
adate = date.now
bdate = adate + adelaytime.AsSeconds
cdate = adate
while (cdate < bdate)
cdate = date.now
end
end
end
end
Hallo roland,

ergaenze die Zeile zum Setzen des Dateinamens an folgender Stelle:

if (ac.getclassname = aclass) then
Printer.The.SetFileName ((i.GetName + ".ps").AsFilename)
if (astring = " ") then

Viel Erfolg und Gruss

Uwe
Hallo Uwe,
so einfach scheint es nicht zu sein. Ich bekomme folgende Fehlermeldung zurück. Habe leider null Ahnung von Avenue. Vielleicht fällt Dir ja noch was ein!

Fehler:
Falsche Klasse für Parameter 1 der Anforderungen SetFileName. Erhalten: FileName. Erwartet: String

Gruss
roland
Hallo Roland,

versuche es mal so:

((i.GetName.asString + ".ps")[i][/i][u][/u]

sollte dann klappen
Roland!

nimm bitte nur das:

((i.GetName.asString + ".ps").AsFilename)

die zeichen dahinter sollten eigendlich den text kursiv und unterstrichen zeigen!
Hallo Uwe,
leider tut sich da gar nichts Neues, ist das Selbe wie vorher auch.

roland
... nun aber richtig:

Printer.The.SetFileName ((i.GetName.asString + ".ps").AsString)

Danke Gast.

Uwe
Wao,
ich bin fasziniert!

Vielen, vielen Dank!!!!

roland