咱们的开发语言还是用框架:laravel5。
应用场景
出库单打印出三色单,这个很普遍,以下用PHP来实现出库单的打印预览,主要用到tcpdf插件,整合到laravel项目中。tcpdf插件可以到官网下载最新的版本。我这里用的是最新版本,
这里提供下载插件链接:
链接:https://pan.baidu.com/s/1Mn8ho_AxyJfWR7YUa0wzhQ
提取码:9doa
三色单截图:
插件截图:
开发功能效果
点击按钮后跳转到打印页面,此页面包含下载pdf功能
点击打印按钮就跳转到打印的页面了
这个时候按打印,你电脑如果有连接打印机的话就可以直接打印出出库单了
下面来看看如何引入tcpdf
把tcpdf文件打包放在laravel根目录或者其他目录里,这一步没关系,只要在controer我是的命名空间里能调用到就好了,我是放在app目录里,命名一个规范名字:Printer
路由文件
Route::any('admin/outWares/{$id}/printer', ['as'=> 'admin.outWares.printer', 'uses' => 'PrinterController@index']);
PrinterController.php都在这个文件里处理。首先要引入插件:use Printer; index方法输入,其他的都是处理各自的业务流程,下面看看源码就明白了。
use Printer;
public function index($id)
{
$outWare = $this->outWareRepository->findWithoutFail($id);
//获取处理的出库单详情
$out_ware_detail = $this->getWareDetail($outWare->outWareDetail);
//这里处理出库单数据
$data = [
......
'remark' => $outWare->remark,
'demand_time' => $demand_time,
'created_at' => $outWare->created_at->format('Y-m-d')
];
$address = $this->getWareAddress($address); //获取处理的地址
$this->TCPDF($data,$out_ware_detail,$address); //调用主要方法
}
/**
* Function:处理地址样式居中
* User:wucy
* @param $address
* @return string
*/
public function getWareAddress($address)
{
if(strlen($address) < 80){
return <<{$address}
Eof;
}else{
return <<{$address}
Eof;
}
}
/**
* Function:获取出库单商品详情
* User:wucy
* @param $outWareDetail
* @return string
*/
public function getWareDetail($outWareDetail)
{
$temp_row_data = [];
$collection = collect($outWareDetail);
$grouped = $collection->groupBy(function ($item, $key) {
$item->stock = abs($item['goods_number']);
return $item['sku_id'];
});
$i=1;
foreach ($grouped as $key => $item){
$temp_row_data[$key] = [
'key_num' => $i++,
'goods_name' => isset($item[0]->goodsSku) ? $item[0]->goodsSku->goods->goods_name : '--',
'attr_name' => isset($item[0]->goodsSku) ? $item[0]->goodsSku->value_name : '--',
'goods_unit' => isset($item[0]->goodsSku) ? $item[0]->goodsSku->goods->goods_unit : '--',
'total' => $item->sum('stock'),
'remark_detail'=>isset($item[0]) ? $item[0]->remark_detail : '--',
];
}
if ($temp_row_data) {
$item = '';
foreach ($temp_row_data as $v) {
$item.= $this->getRowsTable($v);
}
return $item;
}
}
/**
* Function:
* User:wucy
* @param $data
* @return string
*/
public function getRowsTable($data)
{
if($data){
return <<
{$data['key_num']}
{$data['goods_name']}
{$data['attr_name']}
{$data['goods_unit']}
{$data['total']}
{$data['remark_detail']}
Eof;
}
}
/**
* Function:TCPDF,处理的出库单在这里生成
* User:wucy
* @param $data
* @param $out_ware_detail
*/
public function TCPDF($data,$out_ware_detail,$address)
{
// create new PDF document
$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('仓库系统');
$pdf->SetTitle('出库单');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
// set default header data
//$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 048', PDF_HEADER_STRING);
// set header and footer fonts
//$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
//$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
//$pdf->SetFont('stsongstdlight','', 14);
$pdf->SetFont('droidsansfallback','', 14);
// add a page
$pdf->AddPage();
$pdf->Write(0, '', '', 0, 'L', true, 0, false, false, 0);
$pdf->setCellHeightRatio(1.3);
$pdf->SetLineWidth(2);
$tbl = <<
出库单
单据日期:{$data['created_at']}
出库单号:{$data['out_sn']}
发货仓
{$data['ware']}
收货公司
{$data['company']}
提货/收货地址
{$address}
发货人
{$data['consignor']}
发货人电话
{$data['telephone']}
提货人/收货人信息
{$data['consignee']}
{$data['consignee_phone']}
要求配送时间
{$data['demand_time']}
订单备注
{$data['remark']}
出库明细
编号
货品名称
属性
单位
出货数量
实发数量
实收数量
备注
{$out_ware_detail}
签收人
签收日期
请签收人签字后务必将扫描件发至我司联系人邮箱,否则默认实收与实发数量一致
EOD;
$pdf->writeHTML($tbl, true, false, false, false, '');
// -----------------------------------------------------------------------------
//Close and output PDF document
$pdf->Output('出库单_'.date('YmdHis').'.pdf', 'I');
}