MS Office: PDF-Drucker

Gebraucht wird ein PDF-Drucker für (hüst) Word 2000. Nach dem fälligen Update von Windows XP nach Windows 7 (64-Bit) will das alte Adobe Professional 7 keinen PDF-Drucker mehr zur Verfügung stellen. Es ist weiterhin gewünscht, dass der neue PDF-Drucker sich wie der Konverter von Adobe Professional verhält — also nicht über den Druckdialog sondern über ein Icon/Menü gestartet wird. Weiterhin soll das erzeugte PDF in der Verzeichnisstruktur im selben Ordner und mit dem selben Dateinamen (bis auf die Endung .pdf) wie das .doc gespeichert werden.

Das Starten des Drucks über einen separaten Menüpunkt lässt sich leicht mit einem Makro und der Methode ActiveDocument.PrintOut() bewerkstelligen. Schwieriger ist die Übergabe eines Dateinamens an das Drucksystem, da dieses keine Informationen über das zu druckende Dokument erhält/benötigt. Ich habe schliesslich den PDF-Drucker von bioPDF benutzt, da er, im Gegensatz zu vielen anderen, über ein API verfügt. Wie sich allerdings herausstellte, hat MS Office <= 2003 einen Bug, der die native Nutzung des API verhindert. bioPDF stellt aber eine weitere Möglichkeit bereit den Druckvorgang zu steuern, nämlich eine config.exe die eine runonce.ini erzeugt — sozusagen eine Konfiguration für genau einen (den nächsten) Druckjob.

Das folgende VB-Skript tut schliesslich alles was ich eben beschrieben habe (und noch ein kleines Bisschen mehr):

Sub printPDF()

    Dim sPath As String
    Dim sName As String
    Dim sFullName As String
    Dim sPdfFileName As String
    Dim o As Document
    Dim sCurrentPrinterName As String

    Set o = ActiveDocument

    sCurrentPrinterName = ActivePrinter

    ActivePrinter = "PDF Writer - bioPDF"

    If Len(o.Path) = 0 Then
        o.Save
    End If

    sName = CreateObject("scripting.filesystemobject").getBaseName(o.Name)
    sPath = o.Path
    sFullName = o.FullName
    sPdfFileName = sPath & "\" & sName & ".pdf"

    Dim cmd As String

    cmd = "C:\Program Files\bioPDF\PDF Writer\API\EXE\config.exe "

    Shell cmd & "/S Output " & sPdfFileName, vbHide
    Shell cmd & "/S showpdf " & "no", vbHide
    Shell cmd & "/S openfolder " & "no", vbHide

    o.PrintOut

    ActivePrinter = sCurrentPrinterName
End Sub

Kommentar verfassen