Auto Keywords Using OnPreprocessText Event Handler / PDF Printer
This example shows you how to parse a text representation of the current print job. The parsed values can be used to modify the configuration. An OnPreprocessText event handler is implemented in the example code below. It will count instances of all words in the document and sort them to get the top 5 words used in the document. A list of keywords will be created from this from the most used words and the configuration is changed to set the keywords document property for the created PDF document.
Please note that the OnConfigLoaded()
event is used to change the setting ExtractText to yes. This makes the PDF writer create the text file representation of the current print job. The ExtractText configuration can also be specified in the runonce.ini or any other configuration file.
- 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
Download Example Files
You can download and run the example yourself. The files needed are available here. The VBS file must be placed in the macros sub folder of the PDF writer installation. You can use the MacroDir setting to change the location of the VBS files if needed.
Downloads
Attachment | Size |
---|---|
Example file | 1.15 KB |