Auto Keywords durch OnPreprocessText Event Handler / PDF Drucker
Das nachfolgende Beispiel zeigt wie Sie einen Text aus dem aktuellen Printjob heraus parsen. Der geparste Wert kann dann genutzt werden um die Konfiguration des Druckers zu beeinflussen. Ein OnPreprocessText Eventhandler ist im Beispielcode implementiert, welcher alle Wörter im Dokument instanziiert. Er ermittelt die fünf am meisten vorkommenden Wörter im Dokument. Eine Liste von Schlüsselwörtern wird daraus erstellt und die Konfiguration dahingehend verändert, sodass diese Top5-Schlüsselwörter als PDF-Keywords im erzeugten PDF-Dokument hinterlegt werden.
Bitte berücksichtigen Sie, dass das OnConfigLoaded()
Event dazu verwendet wird die Einstellung ExtractText auf den Wert yes zu ändern. Dies veranlasst den PDF Drucker eine Textdatei des Druckjob Inhalts zu erzeugen. Die Einstellung ExtractText kann zudem auch in einer runonce.ini Konfigurationsdatei oder auch in jeder anderen Konfigurationsdateien wie festgelegt werden.
- Rem -- This script will illustrate how to extract and process the text
- Rem -- of the printed output.
- Sub OnConfigLoaded()
- Rem -- Modify the configuration to extract text from the printer
- Rem -- output.
- Context("Config")("extracttext") = "yes"
- End Sub
- Sub OnPreprocessText()
- Const ForReading = 1
- Dim fn, f, fso, cnt
- Dim d, i, word, a
- Dim keywords
- Rem -- Get the name of the text file from the context object
- fn = Context("TextFileName")
- Rem -- Count the pages of the text file. Each page is separated
- Rem -- by a formfeed character chr(12).
- Set d = CreateObject("Scripting.Dictionary")
- Set fso = CreateObject("Scripting.FilesystemObject")
- Set f = fso.OpenTextFile(fn, ForReading)
- While Not f.AtEndOfStream
- l = f.ReadLine()
- Rem -- Count the words
- a = Split(l, " ")
- For i = LBound(a) To UBound(a)
- word = LCase(a(i))
- If Len(word) > 3 Then d(word) = d(word) + 1
- Next
- Wend
- f.Close
- Rem -- Sort the list of words
- SortDictionary d, "desc"
- Rem -- Pick the first 5 words
- keywords = ""
- cnt = 0
- For Each word In d.keys
- cnt = cnt + 1
- If keywords <> "" Then keywords = keywords & " "
- keywords = keywords & word
- If cnt = 5 Then Exit For
- Next
- Rem -- Set the author value in the configuration
- Context("Config")("keywords") = keywords
- End Sub
- Rem -- Sort the dictionary values.
- Rem -- The direction parameter must be either "asc" or "desc".
- Sub SortDictionary(ByRef d, ByVal direction)
- Dim retv
- Dim max, k, maxkey
- direction = LCase(direction)
- If direction <> "asc" And direction <> "desc" Then
- Err.Raise 1000, , "Direction parameter must be " & _
- "either asc or desc in call to SortDictionary."
- End If
- Set retv = CreateObject("Scripting.Dictionary")
- While d.Count > 0
- max = Empty
- maxkey = ""
- For Each k In d.keys
- If (d(k) > max And direction = "desc") Or _
- (d(k) < max And direction = "asc") Or _
- IsEmpty(max) Then
- max = d(k)
- maxkey = k
- End If
- Next
- retv(maxkey) = d(maxkey)
- d.Remove maxkey
- Wend
- Set d = retv
- End Sub
Beispieldatei Download
Sie können den Beispielcode herunterladen. Die darin enthaltene VBS-Macrodatei verschieben Sie nach dem Entpacken bitte in den macros Ordner des PDF-Druckers (im Installationsverzeichnis). Sie können auch mit der Einstellung MacroDir ein anderes Verzeichnis festlegen.
Downloads
Anhang | Größe |
---|---|
Codebeispiel herunterladen | 1.15 KB |