话不多说,直接上代码吧。
//打印
import win.ui;
/*DSG{{*/
var winform = win.form(text="调用打印机";right=759;bottom=469)
winform.add(
btnEnumPrinters={cls="button";text="枚举打印机";left=441;top=193;right=692;bottom=261;z=4};
btnPrint={cls="button";text="调用API打印";left=441;top=32;right=692;bottom=100;z=1};
btnPrintDefault={cls="button";text="默认打印机输出";left=442;top=274;right=693;bottom=342;z=5};
btnWbPrint={cls="button";text="使用HTML打印";left=444;top=108;right=695;bottom=176;z=2};
edit={cls="edit";left=40;top=36;right=417;bottom=429;edge=1;multiline=1;z=3}
)
/*}}*/
winform.btnPrint.oncommand = function(id,event){
import win.dlg.print;
var printDlg = win.dlg.print(winform);
if(!printDlg.doModal()) return;
//开始打印
class DOCINFO {
int cbSize = 20;
ustring docName;
ustring output;
ustring datatype;
INT fwType;
}
::Gdi32.StartDoc(printDlg.hdc,DOCINFO());
::Gdi32.StartPage(printDlg.hdc);
//GDI+绘图
import gdip.graphics;
import gdip.family;
var graphics = gdip.graphics(printDlg.hdc);
var brush = gdip.solidBrush(0xFFFF0000);
var family = gdip.family("宋体");
var strformat = gdip.stringformat();
var curFont = family.createFont( 15,2/*_GdipFontStyleItalic*/, 2/*_GdipUnitPixel*/)
graphics.drawString( "Hellow world! 打印测试!!" , curFont
, gdip.RECTF(15,15,500,150), strformat,brush);
brush.delete()
curFont.delete()
strformat.delete();
family.delete();
//结束打印
::Gdi32.EndPage(printDlg.hdc);
::Gdi32.EndDoc(printDlg.hdc);
printDlg.free()
}
winform.btnWbPrint.oncommand = function(id,event){
import web.mshtml;
wbPrint = web.mshtml();
wbPrint.write("测试一下")
wbPrint.getDoc().execCommand("print")
}
winform.btnEnumPrinters.oncommand = function(id,event){
Winspool = raw.loadDll("Winspool.drv");
var needed = {INT value}
var returned = {INT value}
Winspool.EnumPrinters(2/*_PRINTER_ENUM_LOCAL*/, null, 4, null, 0, needed, returned) ;
var buffer = raw.buffer(needed.value)
Winspool.EnumPrinters(2/*_PRINTER_ENUM_LOCAL*/, null, 4, buffer, #buffer, needed, returned) ;
var info4 = raw.convert(buffer,{
struct printers[] = {
{
ustring printerName;
ustring serverName;
INT attributes;
};
length = returned.value;
}
})
for(i=1;#info4.printers;1){
winform.edit.print(info4.printers[ i ].printerName,info4.printers[ i ].attributes)
}
}
winform.btnPrintDefault.oncommand = function(id,event){
Winspool = raw.loadDll("Winspool.drv");
var buffer = raw.buffer(1024)
var length = { INT value = 1024};
if(!Winspool.GetDefaultPrinter(buffer,length) )return;
var hdcPrint = ::Gdi32.CreateDC(null, buffer, null, null);
class DOCINFO {
int cbSize = 20;
ustring docName;
ustring output;
ustring datatype;
INT fwType;
}
::Gdi32.StartDoc(hdcPrint,DOCINFO());
::Gdi32.StartPage(hdcPrint);
::Gdi32.TextOut(hdcPrint,20,20,"测试打印",4);
::Gdi32.EndPage(hdcPrint);
::Gdi32.EndDoc(hdcPrint);
::Gdi32.DeleteDC(hdcPrint);
}
winform.show()
win.loopMessage();