DE/Fax mit OOo und Fritz!Fax

From Apache OpenOffice Wiki
< DE
Jump to: navigation, search


Einschränkungen durch Änderungen an OOo seit der Entwicklung des Makros

  • Ab Version 3.0 enthält OpenOffice.org leider eine Änderung, die dazu führt, dass das Faxen mit dem Makro nur funktioniert, wenn das Dokument gespeichert wurde. Ungespeicherte Dokumente ("Unbenannt 1") lassen sich nicht versenden. (siehe dazu auch [1], [2], [3])
  • In neueren Versionen, spätestens ab Version 3.1.1 enthält OpenOffice.org leider eine Änderung, die dazu führt, dass Serienfaxe mit dem Makro leider nicht mehr funktionieren. (siehe dazu auch [4])

Stefan Weigel 12:25, 16 April 2010 (UTC)


Ursprüngliche Beschreibung

von StefanW, November 2007

(Diskussion dazu auf der Mailingliste users@de.openoffice.org)

Faxen vom PC geschieht in der Regel über eine Software, die das Versenden von Dokumenten über einen virtuellen Drucker ermöglicht. Schickt man seinen Brief an diesen „Drucker“ so öffnet sich ein Dialogfeld der Fax-Software, in dem die Faxnummer des Empfängers einzutragen ist. Erst dann wird der Faxversand gestartet.

Oft hat man in seinem Brief in der Textverarbeitung bereits die Faxnummer des Empfängers eingetragen. Wenn es gelingt, dass diese im Brief enthaltene Nummer automatisch an den Fax-Drucker übergeben wird, wäre die erneute manuelle Eingabe und das Erscheinen des Dialogfelds nicht mehr erforderlich.

Für das Versenden von Serienfaxen ist die automatische Übergabe der Faxnummer noch viel wichtiger. Die Faxnummer ist ja regelmäßig als Feld in der dem Serienbrief zugrunde liegenden Datenbank vorhanden. Wer will diese Nummern schon alle einzeln beim Versenden eintippen?

Für Windows-PCs ist die Software Fritz!Fax, die vom Hersteller AVM mit seinen ISDN-Produkten vertrieben wird sehr populär. Leider ist diese Software nicht wie andere intelligente Fax-Systeme (z. B. Tobit) in der Lage, auf eine schlicht im Dokumententext enthaltene Faxnummer zuzugreifen und so eine erneute manuelle Eingabe zu vermeiden.

Statt dessen bietet Fritz!Fax eine Automatisierung über die Windows Registry an. Dabei ist Fritz!Fax für den Betrieb mit Microsoft Basic optimiert. In VB und VBA kann man mit nur einem Programmstatement eine Information in die Registry schreiben, allerdings nur genau in diesem Pfad:

HKEY_CURRENT_USER\Software\VB and VBA Program Settings\

Wenn Fritz!Fax hier entsprechende Einträge findet, dann übernimmt es die Faxnummer für den Druckauftrag an den Faxdrucker ohne das Dialogfeld für die Nummerneingabe zu öffnen.

Wollen Programmierer anderer Sprachen die Automatisierung von Fritz!Fax nutzen, müssen sie ebenfalls die erforderliche Info an die eigentlich für VB und VBA vorgesehene Stelle in der Registry schreiben. Das ist grundsätzlich kein Problem, in der Praxis jedoch wesentlich aufwändiger, weil man meist auf Windows-API-Funktionen zurückgreifen muss.

Das Makro OOoFritzFax bietet eine Lösung mit OpenOffice.org Basic an.

Die Installation geschieht durch die folgenden Schritte:

  1. Den Quelltext des Makros finden Sie am Ende dieser Seite
  2. Starten Sie OpenOffice.org Writer und wählen Sie Extras | Makros | Makros verwalten | OpenOffice.org Basic ...
  3. Klicken Sie auf Verwalten...
  4. Markieren Sie "Meine Makros" und klicken Sie auf Neu...
  5. Geben Sie einen beliebigen Namen für das neue Modul ein. OK.
  6. Klicken Sie auf Bearbeiten... Das neue Modul wird im Basic-Editor geöffnet.
  7. Ersetzen Sie mit Kopieren und Einfügen den gesamten Text im neuen Modul durch den unten abgedruckten Makrotext
  8. Schließen Sie den Basic-Editor.

Nun müssen die zwei im Makro enthaltenen Prozeduren an die entsprechenden Ereignisse der Anwendung gebunden werden. Das geht so:

  1. Wählen Sie Extras | Anpassen | Ereignisse
  2. Stellen Sie im Auswahlfeld „Speichern in“ OpenOffice.org ein.
  3. Markieren Sie das Ereignis „Dokument drucken“ und klicken Sie auf die Schaltfläche „Makro“
  4. Suchen Sie in der Bibliotheksauswahl das von Ihnen zuvor angelegte Modul und markieren Sie in der Liste „Name des Makros“ den Eintrag „FritzFax“. Klicken Sie auf OK.
  5. Markieren Sie das Ereignis „Dokument aktivieren“ und klicken Sie auf die Schaltfläche „Makro“
  6. Suchen Sie in der Bibliotheksauswahl das von Ihnen zuvor angelegte Modul und markieren Sie in der Liste „Name des Makros“ den Eintrag „FritzFaxReset“. Klicken Sie auf OK.

Die Fax-Funktionalität ist nun eingerichtet und wir können unser erstes Testfax erstellen.

Zunächst versenden wir einen einzelnen Brief, der im Anschriftenfeld oder sonst wo im Text die Faxnummer enthält. Auf die Faxnummer müssen Sie eine Textmarke mit dem Namen „FaxNr“ setzen. Möglicherweise wollen Sie sich eine Dokumentvorlage für Faxe anlegen, in der diese Textmarke enthalten ist. Drucken Sie dieses Dokument nun auf den Fritz!Fax-Drucker. Der Faxversand müsste nun sofort unter Verwendung der in der Textmarke enthaltenen Nummer beginnen.

Wenn Sie die Textmarke mit der Faxnummer leer lassen oder wenn diese im Dokument gar nicht enthalten ist, verhält sich Fritz!Fax konventionell und verlangt die manuelle Eingabe der Empfängernummer. Sie können ein für das automatische Faxen eingerichtetes Dokument auch jederzeit an einen echten Drucker senden. Das Makro OOoFritzFax tut dann zwar auch seinen Dienst, jedoch ohne Wirkung, aber auch ohne Schaden.

Um nun ein Serienfax zu versenden, erstellen Sie wie gewohnt einen Serienbrief mit OpenOffice.org nehmen Sie in den Brief ein Seriendruckfeld auf, das die Faxnummer des Empfängers enthält. Setzen Sie auf dieses Feld eine Textmarke mit dem Namen „FaxNr“. Wenn Sie die Faxnummer zwar automatisch übergeben wollen, aber nicht auf den versendeten Briefen sehen wollen, können Sie diese mit der Zeicheneigenschaft „ausgeblendet“ aus den Formateinstellungen von OpenOffice.org unsichtbar machen.

Wenn Sie nun Ihren Seriendruck auf den Fritz!Fax-Drucker ausgeben, werden in FritzFax entsprechende Sendeaufträge erzeugt und alle Briefe der Reihe nach an die in Ihrer Adressdatei hinterlegten Faxnummern versendet.

Das Makro besteht derzeit in der Version 0.3, was ausdrückt, dass es eine frühe Versuchsversion ohne große Praxiserfahrung ist. Feedback ist immer willkommen!

Viel Spaß!


REM  *****  BASIC  *****

'*** Control Fritz!Fax by OpenOffice.org
'*** 
'*** Suppress the Fritz dialogue for entering the recipients fax number.
'*** Deliver the fax number through the Windows Registry instead.
'***
'*** Use this macro for single fax letters as well as mail merge fax.
'***
'*** The text document is supposed to contain a bookmark named "FaxNr".
'*** The text in this bookmark is considered as the recipients number.
'***
'*** Author: Stefan Weigel <sweigel AT openoffice DOT org>
'*** © Stefan Weigel
'*** Version 0.3 / 2007-NOV-07

option explicit

Global iMergeCounter as integer


'--- Declaration of Windows API functions for writing to the Windows Registry

Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
 (ByVal hKey As Long, _
  ByVal lpSubKey As String, _
  phkResult As Long) As Long
  
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
 (ByVal hKey As Long,_
  ByVal lpSubKey As String) As Long  

Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
 (ByVal hKey As Long, _
 ByVal lpValueName As String, _
 ByVal Reserved As Long, _
 ByVal dwType As Long, _
 lpData As Any, _
 ByVal cbData As Long) As Long

Declare Function RegCloseKeyA Lib "advapi32.dll" Alias "RegCloseKey" _
 (ByVal hKey As Long) As Long
 

'--- Here we go

Sub FritzFax()

    'This procedure is to be called by the 'Print Document' event
    
    Dim FaxNr as string
    Dim DocName as string
    Dim hCurKey As Long
    Dim lRegResult As Long
    
    'Is this a text document?
    If not thisComponent.SupportsService("com.sun.star.text.TextDocument") Then exit sub
    
    'In case of mail merge count printjobs
    iMergeCounter =  iMergeCounter + 1
    
    'Get FaxNr
    on error resume next
    'FaxNr in bookmark 'FaxNr'
    FaxNr = thisComponent.Bookmarks.getByName("FaxNr").getAnchor.getString
    if iMergeCounter > 1 then
   	 'In case there are numbered bookmarks 'FaxNrX'
   	 FaxNr = thisComponent.Bookmarks.getByName("FaxNr"&iMergeCounter-1).getAnchor.getString
    endif
    on error goto 0
    
    'Get title from window and create name of print job
    DocName = thisComponent.CurrentController.Frame.Title
    do until right(DocName,3)=" - "
    DocName = left(DocName,len(DocName)-1)
    loop
    DocName = left(DocName,len(DocName)-3)
    
    'In case of mail merge add number to name of print job
    if iMergeCounter > 1 then DocName = DocName & " - " & iMergeCounter
    
    'Write registry entry for Fritz
    lRegResult = RegCreateKey(&H80000001, "Software\VB and VBA Program Settings\FRITZ!fax\Print\", hCurKey)
    lRegResult = RegSetValueEx(hCurKey, DocName, 0, 1, FaxNr, Len(FaxNr))
    lRegResult = RegCloseKeyA(hCurKey)

end sub

sub FritzFaxReset()

    'This procedure is to be called by the 'Activate Document' event
    'It Resets the print job counter (in case of mail merge)
    'and cleans up the registry.
    
    Dim lRegResult As Long
    lRegResult =RegDeleteKey(&H80000001, "Software\VB and VBA Program Settings\FRITZ!fax\Print\")
    iMergeCounter = 0

end sub
Personal tools