php 打印

php 打印功能需要printer.dll文件

扩展下载地址 http://downloads.php.net/pierre/

这里有很多PHP的扩展

注意要找对版本,然后修改PHP.INI 开启扩展就可以使用了

 

个人封装了一个小类

类文件

<?php

 class printer {
	public $pname = ''; // 打印机名字
	private $phandle = '';
	protected $message = '';
	public $tableHeader = array('名称','状态','做法','数量');//设置的表头
	public $widthArray = array(0,260,390,510);//针对此种打印机设置的每列的宽度
	public $font = 'SimSun'; //设置字体 默认为宋体
	public $fontWidth = '15'; //设置字体的宽度
	public $fontHeight = '25';//设置字体的高度
	protected $y = 0; //坐标的y
	
	function __construct($pname = '') {
		
		$this->pname =  $pname;
		if (!$this->pconnect()) {
			echo $this->message;
			exit();
		}
	}

	//连接
	private function pconnect() {
		if(!empty($this->pname)) {
		 if (!$this->phandle=@printer_open($this->pname)) {
			$this->message = "could't connect printer whit name '".$this->pname."' ";
			return false;
		 } else {
			return true;
		 }
		}
	}
	
	// 打印
	public function pprint($sortName,$tableName,$tableTime,$dishData) {
		//开始
		printer_start_doc($this->phandle, "壹生活餐饮系统");
		printer_start_page($this->phandle);
		
		//创建字体
		if (!$this->pcreateFont()) {
			echo $this->message;
			exit();
		}
		
		//打印首部
		$this->pfrist($sortName,$tableName,$tableTime);
		
		//打印头部
		$this->pheader();
		
		//打印内容
		$this->pbody($dishData);
		
		//打印一条线
		$this->pline();

		//删除字体
		printer_delete_font($this->font);

		//结束
		printer_end_page($this->phandle);
		printer_end_doc($this->phandle);
		printer_close($this->phandle);
	}
	
	protected function pline() {
		$pen = printer_create_pen(PRINTER_PEN_SOLID, 1, "000000"); //创建一个笔
		printer_select_pen($this->phandle, $pen); // 选择笔
		printer_draw_line($this->phandle, 1, $this->y+100, 800, $this->y+100); //划一条线
		printer_delete_pen($pen); //删除笔
	}
	
	protected function pbody($dishData) {
		foreach ($dishData as $k => $v ) {
			$this->y += 50;
			for ($i=0;$i<count($v);$i++) {
				$this->pdrawText($v[$i],$this->widthArray[$i],$this->y);
			}
		}
	}


	//打印头部
	protected function pheader() {
		for ($i=0;$i<count($this->tableHeader);$i++) {
			$this->pdrawText($this->tableHeader[$i],$this->widthArray[$i],$this->y);
		}
	
	}

	protected function pfrist($sortName,$tableName,$tableTime) {
		//y坐标自加
		$this->pdrawText('菜品分类:'.$sortName,0,$this->y);
		$this->y += 40;
		
		$this->pdrawText('桌台名称:'.$tableName,0,$this->y);
		$this->y += 40;

		$this->pdrawText('开桌时间:'.$tableTime,0,$this->y);
		$this->y += 50;
	}

	//画文字
	protected function pdrawText($text,$x=0,$y=0) {
		printer_draw_text($this->phandle, $text,$x,$y);
	}
	
	//创建字体并选择
	protected function pcreateFont($fontWeight = PRINTER_FW_NORMAL) {
		if (!$this->font = @printer_create_font($this->font, $this->fontHeight, $this->fontWidth, $fontWeight, false, false, false, 0)) {
			$this->message = 'create font failed!';
			return false;
		} else {
			// 选择字体
			printer_select_font($this->phandle, $this->font); 
			return true;
		}
	}

 }

 

调用方法

<?php
include_once('printer.php');
$printer = new printer('GP-U80300 Series'); //传入打印机名称 一定要现在服务端配置好打印机
$body = array(
		0 => array('红烧西红柿','已落单','微辣',1),
		1 => array('凉拌蔬菜','已落单','很辣',2),
		2 => array('红烧字体长点','已落单','很辣',1),
		3 => array('红烧字体长点','已落单','很辣',2),
		4 => array('红烧字体长点蔬菜','已落单','很辣',1),
		5 => array('红烧字体长点','已落单','很辣',2),
		6 => array('红烧字体长点','已落单','很辣',1)
);
$printer->pprint('热菜','包厢001','2013-02-14 15:33:22',$body);

注意调用字体要用能支持中文的字体

 发一个字体对照表,调用的时候用后面的英文名

字体:
   黑体:SimHei

   宋体:SimSun

   新宋体:NSimSun

   仿宋:FangSong

   楷体:KaiTi

   仿宋_GB2312:FangSong_GB2312

   楷体_GB2312:KaiTi_GB2312

   微软雅黑体:Microsoft YaHei

   装Office会生出来的一些:

   隶书:LiSu

   幼圆:YouYuan

   华文细黑:STXihei

   华文楷体:STKaiti

   华文宋体:STSong

   华文中宋:STZhongsong

   华文仿宋:STFangsong

   方正舒体:FZShuTi

   方正姚体:FZYaoti

   华文彩云:STCaiyun

   华文琥珀:STHupo

   华文隶书:STLiti

   华文行楷:STXingkai

   华文新魏:STXinwei

 

php 打印功能只能再服务端打印,一般用不到,但是如果是局域网内的系统还是可以使用的

 

 

posted @ 2013-11-21 13:32  河边的老牛  阅读(705)  评论(0编辑  收藏  举报