Laravel5.8从入门到实战视频教程+源码【93节】
链接:http://www.startphp.cn/detail/55
文章正文
咱们的开发语言还是用框架:laravel5。
应用场景
出库单打印出三色单,这个很普遍,以下用PHP来实现出库单的打印预览,主要用到tcpdf插件,整合到laravel项目中。tcpdf插件可以到官网下载最新的版本。我这里用的是最新版本,
这里提供下载插件链接:
提取码:9doa
三色单截图:
插件截图:
开发功能效果
点击按钮后跳转到打印页面,此页面包含下载pdf功能
点击打印按钮就跳转到打印的页面了
这个时候按打印,你电脑如果有连接打印机的话就可以直接打印出出库单了
下面来看看如何引入tcpdf
把tcpdf文件打包放在laravel根目录或者其他目录里,这一步没关系,只要在controer我是的命名空间里能调用到就好了,我是放在app目录里,命名一个规范名字:Printer
路由文件
Route::any('admin/outWares/{$id}/printer', ['as'=> 'admin.outWares.printer', 'uses' => 'PrinterController@index']);
PrinterController.php都在这个文件里处理。首先要引入插件:usePrinter; 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 <<<Eof
{$address}
Eof;
}else{
return <<<Eof
{$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 <<<Eof
{$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 = <<<EOD
出库单
单据日期:{$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');
}
以上是文章全部内容,有学习与经验交流的友友可以加小编为好友。有技术问题可以一起探讨与交流,希望你是学习技术的。
让学习成为一种习惯
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。