# プリンタの指定 .printerName = "CITIZEN_CT_S601" # プロット用関数 beginTP = function(...){ .hiddenFileName <<- tempfile() pdf(.hiddenFileName, width = 4, height = 4, ...) } endTP = function(copy = 1){ opcopy = max(1, as.numeric(copy)) dev.off() system(paste0("lpr -P ", .printerName, " ", .hiddenFileName, " -#", opcopy, " -o media=X80MMY80MM -o fit-to-page", collapse = "")) } # beginTP() # plot(lynx) # endTP() # $ lpoptions -p CITIZEN_CT_S601 -l # PageSize/Media Size: X52D5MMY20MM X52D5MMY30MM X52D5MMY40MM X52D5MMY50MM X80MMY20MM X80MMY30MM X80MMY40MM X80MMY50MM X80MMY60MM X80MMY70MM X80MMY80MM X80MMY90MM X80MMY100MM X80MMY110MM X80MMY120MM X80MMY130MM X80MMY140MM X80MMY150MM X80MMY160MM X80MMY170MM X80MMY180MM X80MMY190MM X80MMY1000MM X80MMY2000MM Custom.WIDTHxHEIGHT printTP = function(x, ...){ owidth = options("width")$width # 元の値を取得 options(width=48) .hiddenTPFileName <<- tempfile() # print系 の中身を先に一時ファイルへ書き込み sink(file=.hiddenTPFileName) print(x, ...) sink() # エラー防止で書き込んたファイルを読み込んで処理 comd = deparse(substitute(x)) con = file(.hiddenTPFileName) .readData = readLines(con) close(con) con = file(.hiddenTPFileName) header = paste0("\033@\034C\001\033E\001", iconv(comd, 'utf-8', 'shift-jis')) # コマンドの生成 (オブジェクト名) .sjisData = iconv(.readData, 'utf-8', 'shift-jis') .sjisData[1] = paste0("\033@\034C\001", .sjisData[1], collapse="") .sjisData[length(.sjisData)] = paste0(.sjisData[length(.sjisData)], "\n\035VA\003", collapse="") # print される中身 writeLines(c(header, .sjisData), con) # 一時ファイルへの書き出し close(con) # コネクタ閉 system(paste0("cat ", .hiddenTPFileName, "| lpr -P ", .printerName, collapse = "")) # プリンタへ印刷 unlink(.hiddenTPFileName) # 一時ファイルの削除 options(width=owidth) # 元の値を復元 }