Wie kann ich aus gedruckten PS-Dateien mit FreePDF_Multidoc komfortabel dynamisch eine Seriendruckdatei erstellen, um alle PDF-Dokumente einzeln zu konvertieren und abzuspeichern?
Lösung:
Ab der Version 1.4.10 können sog. Plug-In's (s. PlugIn) vor bzw. nach der eigentlichen Konvertierung ausgeführt werden. Und hier setzt mein Beispiel an.
Erstellen Sie sich ein VB-Script mit folgendem Beispiel: (Downloadlink: Read_PS_Titel.vbs)
Erklärung:
Gegeben sei, dass alle gedruckten PS-Dateien immer den gleichen Titel-Aufbau haben.
Mit der Hilfsfunktion Find_PSTitel() wird der Titel aus der PS-Datei ausgelesen. Dieser Titel wird wiederum an die Hilfsfunktion Add_Seriendruck() übergeben.
Mittels VBS wird dieser Titel so zerlegt und aufbereitet, dass daraus eine Seriendruckdatei für den Dateinamen und den Speicherpfad generiert werden kann.
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim WSHShell : Set WSHShell = WScript.CreateObject("WScript.Shell") Dim f, p, fc Dim PS_Titel, PS_Mastername Dim fSeriendruck Dim iCount Set p = fso.GetFolder("C:NetzwerkPS-Tmp")
set fSeriendruck = fso.CreateTextFile("C:NetzwerkSeriendruck.txt", true) fSeriendruck.close
set f = p.Files for each fc in f PS_Mastername = left(fc.Name,Len(fc.Name)-4) exit for 'Ausstieg aus Schleife Next
'Auslesen des PS-Titel muss über eine Zählvariable erfolgen, da der PS-Dateiname 'immer nur MultiDoc1.ps, MultiDoc2.ps usw. lautet. Ich verwende in meinem Programm die gleiche 'Namensvergabe-Systematik wie FreePDF. Derzeit auch keine Änderung absehbar.
iCount = 1
Do While fso.FileExists(p & "" & PS_Mastername & iCount & ".ps") PS_Titel = Find_PSTitel(p.Path & "" & fc.Name) call Add_Seriendruck("C:NetzwerkSeriendruck.txt",PS_Titel) iCount = iCount +1 loop
Function Find_PSTitel(Datei) 'PS-Titel aus der Postscript-Datei auslesen
Dim FileIn Dim tmpStr
Set FileIn = FSO.OpenTextFile(Datei, 1 ) ' Datei zum Lesen öffnen
Do While Not (FileIn.atEndOfStream) ' wenn Datei nicht zu ende ist, weiter machen tmpStr = FileIn.Readline If InStr(1, tmpStr, "%%Title:", vbTextCompare) 0 Then 'Gefunden Find_PSTitel= Trim(Right(tmpStr, Len(tmpStr) - Len("%%Title:"))) Exit Do End If Loop
End Function
Sub Add_Seriendruck(Seriendruckdatei,PS_Titel) 'Der PS-Titel wird jetzt aufgespalten in einzelne Bestandteile, 'um daraus einen Dateinamen und Speicherpfad zu extrahieren
'PS-Titel lautet z. B.: ESt 2008 Formulare - Mustermann (13806)
dim tmp 'Zwischenwert dim f 'Speichername = ESt-Formulare dim p 'Speicherpfad = v:13813806ESt2008 Dim FileOut
f = left(PS_Titel,3) & "-" & Mid(PS_Titel,Len("ESt 2008 ")+1,Len("Formulare")) p= "v:"
p= p & left(tmp,3) & "" & tmp 'MdNr mit Unterverzeichnissen p =p & "" & Left(PS_Titel,3) 'Pfad mit ESt ergänzen
tmp = mid(PS_Titel,Len("ESt ")+1,4) 'Jahreszahl extrahieren p=p & "" & tmp 'Pfad mit Jahreszahl ergänzen
Set FileOut = FSO.OpenTextFile(Seriendruckdatei, 8 ) 'Fügt Inhalt an (Append) FileOut.Writeline f & ";" & p FileOut.Close
End Sub
Und jetzt muss nur noch ein Druckjob mit dem Verweis auf die Seriendruckdatei erstellt worden sein. Einfach den Druckjob starten und schon geht es los.
Das Beispiel kann natürlich beliebig erweitert und ausgebaut werden.
Viel Spaß.
Ahmed
(geändert am: 16.07.2009, da die PS-Titel nicht in der Konvertierungsreihenfolge ausgelesen wurde.)
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de