Der PDF Drucker unterstützt nun VBScript Macros und Event Handlers (ab Professional Edition oder höher). Das bedeutet Sie können nun direkt in den Prozess der PDF Erzeugung eingreifen durch die Entwicklung eigener Visual Basic Event Handlers. Zusätzlich können Sie Visual Basic Script in Ihren Macros verwenden um Dateinamen, Autor, Titel und Beschreibung sowie PDF Schlüsselwörter abzufragen bzw. auszugeben.

VBScript Events sind ein weiteres wirklich mächtiges Werkzeug um den PDF Drucker benutzerdefiniert in eigene Programme einzubinden und zu nutzen. Durch das Schreiben der richtigen Eventhandlers können Sie die komplette Kontrolle über den PDF und Bildoutput und den Dialogen erhalten, die Anwender während des Erzeugungsprozesses angezeigt bekommen. Es ermöglicht Ihnen den Zugang zu den normalen Dialogen des Programms Zugriff zu erhalten um so eigene Dialoge in Ihrer bevorzugten Programmiersprache einbinden zu können.

Eigene VBScript Macros werden im "Macros" Verzeichnis, welches sich im Installationsverzeichnis des Druckers befindet, unter einem einfachen Dateinamen abgelegt. Alle VBScript Macros in diesem Verzeichnis werden vom PDF-Drucker ausgeführt! Flexibel auf den PDF Drucker einwirken, mit einfacher VBScript Programmierung eröffnet ungemeine Flexibilität für Sie den PDF Drucker auf beliebige Weise zu Konfigurieren, zu Nutzen und programatisch zu beeinflussen!

Lebenszyklus des Programms

Um die VBScript Features des PDF Druckers nutzen zu können, müssen sie den Programm-Lebenszyklus verstehen. Der Lebenszyklus ist eine Beschreibung an welcher Stelle des Zykluses welches Event ausgelöst wird und die dann verfügbaren Informationen in Abhängigkeit von Event und dem aktuellen Prozessabschnitt.

Event Handlers lesen und schreiben häufig Informationen in die globale Context Variable. Die globale Context Variable beinhaltet Informationen über den aktuellen Status der Dokumenterstellung. Events können den Erzeugungsprozess durch Änderung der Werte in der globalen Context Variablen kontrollieren.

Die nachfolgende, in Englisch verfasste Referenztabelle zeigt die Reihenfolge der Event Handlers und die gesetzten Context Variablen.

Event Handler or
Context Variable
Description
PrinterName Name of the used PDF printer.

printername = Context("PrinterName")

reads the PDF printer name into the printername variable.
AppPath Holds the full path of the program folder where the PDF printer is installed.

apppath = Context("AppPath")

reads the program path into the apppath variable.
PostscriptFileName This context variable holds the name of the raw postscript output from the printer driver. Using this file path you can get access to the postscript code as it looks before any modifications are made to it.

filename = Context("PostscriptFileName")

reads the file path into the filename variable.
DocumentName This is the name of the document as it is listed in the print job queue. The title in the configuration is often based on this value. However, the title in the configuration is often change whereas the Context("DocumentName") stays the same in all event handlers.
DocumentAuthor The Context("DocumentAuthor") represents the name of the author as it is was given in print job queue. Whereas, the Context("Config")("author") can change with the configuration the Context("DocumentAuthor") remains unchanged.
DocumentCreationDate A creation date string read from the raw postscript created by the printer driver.
Config This is the loaded configuration. The configuration is probably the most interesting context variable. It carries information about the current configuration. Using this context variable you can read and write to the current configuration and change the PDF or image creation process. Configuration values must be accessed using lower case names. If you by accident use mixed or upper case names then you will just get an empty result.

Context("Config")("watermarktext") = "Hello World!"

sets the watermark text of the created document.
OnConfigLoaded

This event is raised when the configuration is loaded from a file. The loaded configuration can be manipulated through Context("Config").

Rem -- Simple example that shows the selected output

Rem -- path in a message box

Sub OnConfigLoaded()

    MsgBox context("Config")("output")

End Sub

 

Rem -- Example that creates a sample bookmark at page 1

Sub OnConfigLoaded()

    Dim filename, fso, content, file

 

    Rem -- Get the name of the Postscript file

    filename = Context("PostscriptFileName")

 

    Rem -- Load the content

    fso = CreateObject("Scripting.FileSystemObject")

    Set file = fso.OpenTextFile(filename, 1) ' 1 = ForReading

    content = file.ReadAll()

    file.Close()

 

    Rem -- Insert bookmark

    content = Replace(content, _

        vbcrlf & "%%Page: 1 1" & vbcrlf, _

        vbcrlf & "[ /Title (Sample bookmark) /OUT pdfmark" & _

        vbcrlf & "%%Page: 1 1" & vbcrlf)

 

    Rem -- Save the file again

    Set file = fso.OpenTextFile(filename, 2) ' 2 = ForWriting

    file.Write(content)

    file.Close()

End Sub

TextFileName The PDF writer can create a text file with all the text found in the print job. A text extract can be parsed by an event handler and used to modify values in the configuration. This is useful if you want to use values from the printer output as properties in the resulting PDF file.

To enable the text extraction you must set the ExtractText configuration value to yes.

textfile = Context("TextFileName")

reads the full path of the extracted text file into the textfile variable.
OnPreprocessText

Triggered when the extracted text is ready for processing.

REM -- Example that shows the file name of the extracted text file.

Sub OnPreprocessText()

    MsgBox(context("TextFileName"))

End Sub

This event is only fired if you have set ExtractText=yes in the configuration.

OnMacrosApplied Macros have been applied to the configuration.
OnAfterGUI

Called after the GUI has been shown. It is also called if the GUI is not shown based on the ShowSettings setting. This is the event where you can make the last adjustments before the PDF or image is created. You can access and modify information such as document title and author using the context("Config")("title").

REM -- Example that adds the author to the title

Sub OnAfterGUI()

    context("Config")("title") = _

        context("Config")("title") & _

        " (" & context("Config")("author") & ")"

End Sub


PageCount Context("PageCount") contains the number of pages in the output.
OutputFileName Name of the output file.
FileCount Number of files in the output. Multiple files are normally created when the output type is an image.
FileList Context("FileList") is a dictionary of file paths. Each entry in this dictionary represents a single output file. When multiple files are created, this context variable is very useful to get a complete list of file names.
ErrorNumber Context("ErrorNumber") is the error code in case of an error.
ErrorDescription Context("ErrorDescription") is the error description in case of an error.
ErrorSource Context("ErrorSource") is the error source in case of an error.
OnSuccess OnSuccess is triggered if the document creation is completed without errors.
OnError OnError is triggered if there were errors during the document creation.
OnAfterPrint Regardless of the status this event is triggered when the process is completed. If you need to know if the operation was a success then you can create an event handler for the OnSuccess event. In this handler you can set a global variable indicating success and test this variable in the OnAfterPrint event handler.

Error Handling

Wenn ein Error während der Ausführung eines Macro Scripts auftritt, wird die PDF Erzeugung abgebrochen und der Fehler gemeldet. Errors können durch fehlerhaften Code oder durch den expliziten Wunsch des Programmierers auftreten.

Der Beispielcode unten wie Sie einen Error erzeugen.

  1. Sub OnAfterGUI()
  2.  
  3.     Err.raise(9999, "Test macro script", "Fake error to stop execution.")
  4.  
  5. End Sub

Standardmäßig zeigt das Program die Fehlermeldung in einem Meldefenster und der Anwender muss die Meldung durch das Drücken des OK Buttons bestätigen um fortzufahren.

Die Meldefenster können deaktiviert werden. Dies kann durch das Setzen der Einstellung SuppressErrors erfolgen, und Fehler können in einer Status-Datei weggeschrieben werden indem man die Einstellung StatusFile setzt.

Sie können Ihren eigenen Code verwenden um auf Errors zu reagieren. Dafür verwenden Sie den OnError Event Handler. Das Codebeispiel unten zeigt wie Sie die Fehlermeldung eines Errors abgreifen können.

  1. Sub OnError()
  2.  
  3.     MsgBox("Error trapped by OnError eventhandler." & vbcrlf & vbcrlf & _
  4.  
  5.      "Error=" & Context("ErrorNumber") & vbcrlf & _
  6.  
  7.      "Description=" & Context("ErrorDescription") & vbcrlf & _
  8.  
  9.      "Source=" & Context("ErrorSource"))
  10.  
  11. End Sub

Wichtiger Hinweis: Sie sollten im Coding unbedingt auf Groß- und Kleinschreibung achten, wenn Sie Namen des context object verwenden um Informationen abzugreifen etc.

Wenn Sie lesend und schreibend auf Context("Config")("configname") sind alle Konfigurationsnamen klein zu schreiben (lower-case)!

Top