| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README | 2014-04-02 | 3.3 kB | |
| tclprinter10a4.zip | 2014-04-02 | 90.0 kB | |
| tclprinter10a3.zip | 2014-03-27 | 70.8 kB | |
| Totals: 3 Items | 164.1 kB | 0 | |
Tclprinter - Tcl interface to the Windows printing system.
Example 1. List installed printers.
puts [printer names]
Example 2. Print to the matrix printer directly.
printer write -name "EPSON LX-300+ /II" [encoding convertto $text]
Example 3. Print to the laser printer via Windows GDI.
printer print -name "Canon LBP2900" $text
Tcl printer uses two windows printing interfaces: "raw" (Print Spooler API) and "gdi" (GDI Print API).
To create a handle to the API use 'printer open -raw' or 'printer open -gdi'
Example 4. Draw a page using GDI API
# open gdi handle
set h [printer open -gdi -name "Canon LBP2900"]
# start a job
$h start
# start a page
$h startpage
# draw a rectangle
$h rectangle -rect {100 100 2000 1000}
# place a text into rectangle
$h place -rect {100 100 2000 1000} -align {center wordbreak} -font {Courier 10} $text
# draw a gray ellipse
$h ellipse -rect {100 1100 2000 2000} -brush ltgray
# close all
$h endpage
$h end
$h close
Example 5. Pause all printer jobs using Spooler API.
set h [printer open -raw -name "EPSON LX-300+ /II"]
foreach id [$h document select id] {
$h document pause $id
}
$h close
Example 6. Print and control the job using Spooler API.
set h [printer open -raw -name "EPSON LX-300+ /II"]
$h start -document "Example 6"
$h startpage
$h write [encoding convertto $text]
$h endpage
$h end
for {set i 0} {true} {incr i} {
if {[catch {$h document status}]} {
puts "End of the job"
$h close
break
}
if {$i >= 10} {
puts "Timed out"
$h abort
break
}
after 1000
}
Example 7. Print using GDI API and control the job using Spooler API.
set document "Example 5 - [clock clicks]"
set printer [printer open -gdi -name "Canon LBP2900"]
$printer start -document $document
$printer startpage
$printer print $text
$printer endpage
$printer end
# GDI API does not provide interface to the printer job, create a "raw" handle
set monitor [printer open -raw -name "Canon LBP2900"]
# Locate the job
set documentid [lindex [$monitor document select id -document $document] 0]
for {set i 0} {true} {incr i} {
if {[catch {$monitor document status $documentid} result]} {
puts "End of the job"
break
}
puts "Current job status: $result"
if {$i >= 10} {
$monitor document delete $documentid
puts "Timed out"
break
}
after 1000
}
$monitor close
$printer close
Changes...
2014-03-04 - start
2014-03-16 - alpha 1. GDI interface
2014-03-20 - alpha 2. RAW interface
2014-03-27 - alpha 3. Job control (rawcommand document)
2014-04-02 - alpha 4. Compatibility fixes and cleanups
Tcl 8.5/8.6 - all tests passed
Gcc 4.8.1 (mingw) - all tests passed
VC 6.0 / Windows 98 - failed on test 6-1-3/4 and some errorcodes
What's Missing?
1. Documentation.
2. Error reporting (TclWinConvertError, Tcl_SetErrorCode).
3. Callback for startpage/endpage.
4. Noninteractive printer setup (page form, orientation, copies etc).
5. Image printing.
6. XPS interface?
7. Testing, testing, testing... Different Windows versions, different printers.