PHP与出库单打印预览,包含下载与打印功能

咱们的开发语言还是用框架:laravel5。

 

应用场景

出库单打印出三色单,这个很普遍,以下用PHP来实现出库单的打印预览,主要用到tcpdf插件,整合到laravel项目中。tcpdf插件可以到官网下载最新的版本。我这里用的是最新版本,

这里提供下载插件链接:

链接:https://pan.baidu.com/s/1Mn8ho_AxyJfWR7YUa0wzhQ

提取码:9doa

三色单截图:

PHP与出库单打印预览,包含下载与打印功能_第1张图片

 

插件截图:

PHP与出库单打印预览,包含下载与打印功能_第2张图片

 

开发功能效果

PHP与出库单打印预览,包含下载与打印功能_第3张图片

 

点击按钮后跳转到打印页面,此页面包含下载pdf功能

PHP与出库单打印预览,包含下载与打印功能_第4张图片

点击打印按钮就跳转到打印的页面了

PHP与出库单打印预览,包含下载与打印功能_第5张图片

这个时候按打印,你电脑如果有连接打印机的话就可以直接打印出出库单了

 

下面来看看如何引入tcpdf

把tcpdf文件打包放在laravel根目录或者其他目录里,这一步没关系,只要在controer我是的命名空间里能调用到就好了,我是放在app目录里,命名一个规范名字:Printer

PHP与出库单打印预览,包含下载与打印功能_第6张图片

 

路由文件

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');
}

你可能感兴趣的:(PHP,框架,PHP打印预览)