tk print from 8.7 for 8.6
experimented a bit with print.tcl from tk8.7 in tk8.6
Tip 604 Tip Printing Support for Text and Canvas Widgets
Printing in core - still a ways to go before TIP, but major milestone
#print-8.6erw.tcl # ..lib/print-8.6erw.tcl #0.3 #13.09.2023 14.20 # using print.tcl and tk print from tk8.7 for tk8.6 if {[info tclversion] eq "8.6"} { source [file join [file normalize [file dirname [info script]]] print.tcl] # ..lib/print.tcl # print.tcl from src/tk/library (Source Code tk 8.7) # https://core.tcl-lang.org/tips/doc/trunk/tip/604.md if {[tk windowingsystem] eq "win32"} { package require gdi package require printer #Tcl Extensions by Michael Schwarz #http://wiki.tcl-lang.org/page/TkPrint package require struct::list namespace eval ::tk::print { # this 4 procs exists in tk8.7 not in libs printer or gdi, wrapper in tk 8.6 proc _openprinter {args} { # variable printargs variable printer_name variable paper_width variable paper_height variable dpi_x variable dpi_y variable copies #set pliste [printer list] set hDC [printer open {*}$args] set attr [struct::list flatten [printer attr -hDc $hDC]] # diff to 8.7, proc _set_dc, set printargs(hDC) $printer_name # set printer_name [dict get $attr device] # set printargs(printer_name) [dict get $attr device] set printer_name [lindex $hDC 0] set paper_width [lindex [dict get $attr "page dimensions"] 0] set paper_height [lindex [dict get $attr "page dimensions"] 1] set dpi_x [lindex [dict get $attr "pixels per inch"] 0] set dpi_y [lindex [dict get $attr "pixels per inch"] 1] set copies [dict get $attr copies] } proc _closeprinter {} { printer close } proc _opendoc {} { printer job start } proc _closedoc {} { printer job end } proc _openpage {} { printer page start } proc _closepage {} { printer page end } proc _gdi {args} { gdi {*}$args #tailcall gdi {*}$args } proc _selectprinter {} { # variable printargs variable printer_name variable paper_width variable paper_height variable dpi_x variable dpi_y variable copies set hDC [printer dialog select] set attr [struct::list flatten [printer attr -hDc $hDC]] # diff to 8.7, proc _set_dc, set printargs(hDC) $printer_name # set printer_name [dict get $attr device] # set printargs(printer_name) [dict get $attr device] set printer_name [lindex $hDC 0] set paper_width [lindex [dict get $attr "page dimensions"] 0] set paper_height [lindex [dict get $attr "page dimensions"] 1] set dpi_x [lindex [dict get $attr "pixels per inch"] 0] set dpi_y [lindex [dict get $attr "pixels per inch"] 1] set copies [dict get $attr copies] } } } }
Example: printtest86.tcl
#printtest86.tcl package require Tk #package require tkcon #tkcon show # ../lib/lib print-8.6erw.tcl # ../lib/print.tcl # print.tcl from src/tk/library (Source Code tk 8.7) source [file join [file join [file normalize [file dirname [info script]]] lib print-8.6erw.tcl]] proc call {} { #set out "" set out [catch {tk print .t} err1] .t insert end "arr: [array get ::tk::print::printargs]\n" .t insert end "out: $out \n" .t insert end "err1: $err1 \n" .t insert end "attr: [catch {printer attr -hdc $::tk::print::printargs(hDC)} err2]\n" .t insert end "err2: $err2 \n\n" } text .t button .btn -text print -command {call} .t insert end "[info patchlevel] \n" .t insert end "[tk windowingsystem]\n" .t insert end "[info nameofexecutable]\n\n" pack .t -fill both -expand 1 pack .btn -expand 0