3 Nov 2007 

Druckerschächte unter MacOSX

Ein leidiges Thema. Nach vielen Versuchen habe ich jetzt meine Lösung gefunden. Den entscheidenden Hinweis* lieferte Axel K.: „Setze irgendwas nochmal, damit es wirklich gilt! Papierformat?“ Ville merci, das war es!

imageDie Grundlagen

Für die Version 2003 brauchen Sie das Plugin CarbonPrinting.bundle, für die Version 2004 das 4D Pack.bundle in der zur 2004 passenden Version. Die 4D-eigenen Befehle leisten das nicht unter OSX.

Es krabbeln keine Käfer aus der Verpackung, die hätten nur 6 Beine. Spinnentiere sind es ebenfalls nicht, trotz der 8 Beine. Sollen wohl Computer-Bausteine darstellen.

Das Verfahren

Vor dem ersten Druck werden die Druck-Parameter per PRINT SETTINGS abgefragt. Ist OK=1, sind die aktuellen Druckerinstellungen in ein Blob zu sichern. Dies ist die Fassung für die V2003
$err_L:=PMFlattenPageFormat (◊PageFormat)
$err_L:=PMFlattenPrintSettings (◊PrintSettings)
und dies die für die V2004, die Format und Einstellungen in einem Blob ablegt und einen weniger technischen, mehr beschreibenden Namen verwendet
$err_L:=AP Print settings to BLOB (◊PageFormat)
Außerdem setze ich einen Flag, daß die Druckereinstellungen abgefragt wurden.

Vor jedem Folgedruck, lade ich die in den Blobs gespeicherten Druckeinstellungen. Das sieht in der V2003 so aus
$err_L:=PMUnflattenPageFormat (◊PageFormat)
$err_L:=PMUnflattenPrintSettings (◊PrintSettings)
und in der V2004 wieder ein Befehl für beide Bestandteile
$err_L:=AP BLOB to print settings (◊PageFormat)

imageDiese Methodik klappte bisher mit jedem Drucker, den ich daraufhin testen konnte. Es kann nicht nur Schacht zwei für die erste Seite und Schacht 3 für die Folgeseiten festgelegt werden. Es sind alle Druckeroptionen einstellbar. Wenn in den ausgewählten Schächten das farbige Briefpapier bevorratet ist, macht es Sinn den Drucker im preiswerteren Schwarzweiß-Druck zu fahren. Die Voreinstellungen werden unter einem Namen gesichert. Klappt!

image

Wir haben das vor dem Feierabend auf allen Clients getestet. Funktionierte überall auf Anhieb und wir sind mit einem Endlich-im-Griff-Gefühl nach Hause gefahren. Am nächsten Morgen klappte es nicht mehr. Beim ersten Ausdruck kam wie gewünscht Seite 1 aus Schacht 2 und die Folgeseite aus Schacht 3. Der Drucker verwendete den s/w-Modus. Die Folgedrucke fielen zurück auf die Standard-Einstellungen des Druckers, also im Farbmodus auf Blankopapier aus Schacht 1. Was ist das für ein Voodoo?

Voodoo ist Quatsch :-) nur was war am Abend vorher anders, als am Morgen danach. Nix war anders, nur hatten wir den Käfer nicht aus seinem Feierabend geweckt.

Der entscheidende Tip

PMUnflattenPageFormat/PMUnflattenPrintSettings bzw. AP BLOB to print settings laden zwar die Druckereinstellungen. Aber sie gelten nicht. Es muß nach dem Laden noch ein Druck-Parameter gesetzt werden, damit die geladenen Druckereinstellungen als gültig akzeptiert werden. Also ein Befehl, der nichts mehr verändert und Mac wie Windows funktioniert.

Jetzt hole ich mir den Papiernamen vor dem ersten Druck
GET PRINT OPTION(Paper option ;printPaperName)
und setze diesen nach dem Laden der Druckereinstellungen vor Folgedrucken neu.
SET PRINT OPTION
(Paper option ;printPaperName)
Sie haben recht, das ist ein Placebo. Wenn es hilft?!

So sieht die Methode in der V2004 aus:
If (◊vb_PrntSettings=1) `Druckdialoge zeigen
    PAGE SETUP($P_PRNT_Table->;$formName)
    PRINT SETTINGS
    GET PRINT OPTION(Paper option ;printPaperName)
    $err_L:=AP Print settings to BLOB (lastPrintSettings_X)
Else `Druckparameter laden
    If (BLOB size(lastPrintSettings_X)>0)
    $err_L:=AP BLOB to print settings (lastPrintSettings_X)
    If (printPaperName="") `keine anderen Käfer wecken
        GET PRINT OPTION(Paper option ;printPaperName)
    End if
    SET PRINT OPTION(Paper option ;printPaperName) `dem Käfer was anderes zu Fressen geben
    End if
End if
Die Methode ist in der V2003 synonym einzusetzen.

Und nun zu 4D Write

Ab V2004 heißen die Befehle in 4D Write WR BLOB TO PRINT SETTINGS und WR Print settings to BLOB. Die Blobs aus WR BLOB TO PRINT SETTINGS und AP BLOB to print settings sollen gleichwertig sein. Das habe ich nicht getestet.

Doch es klappt!
Es ist selten eine gute Idee, Felder direkt an Externals zu übergeben. Verwenden Sie Variablen und speichern deren Inhalt in Feldern und laden später Feldinhalt in die Variable. Die Printsetting-Blobs sind nicht sehr groß, keine Sorge.

4D Themen: Berichte in Arbeit