Laravel5.8从入门到实战视频教程+源码【93节】
链接:http://www.startphp.cn/detail/55

文章正文

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

应用场景

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

这里提供下载插件链接:

提取码:9doa

三色单截图:

插件截图:

Tcpdf页面排版_唐草片的副作用及禁忌_tcpdf

开发功能效果

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

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

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

下面来看看如何引入tcpdf

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

tcpdf_唐草片的副作用及禁忌_Tcpdf页面排版

路由文件

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

    $pdf->setCellHeightRatio(1.3);
    $pdf->SetLineWidth(2);

    $tbl = <<<EOD
         
            
                
                
            
         
出库单

         
            
                
                
                      
            
         
单据日期:{$data['created_at']}出库单号:{$data['out_sn']}

         
                
                    
                    
                    
                    
                    
                    {$address}
                

                
                    
                    
                    
                    
                

                
                    
                    
                    
                    
                    
                

                
                    
                    
                

                
                    
                

                
                    
                    
                    
                    
                    
                    
                    
                    
                
                {$out_ware_detail}
                
                    
                    
                    
                    
                
                请签收人签字后务必将扫描件发至我司联系人邮箱,否则默认实收与实发数量一致
            
发货仓{$data['ware']}收货公司{$data['company']}提货/收货地址
发货人{$data['consignor']}发货人电话{$data['telephone']}
提货人/收货人信息{$data['consignee']}{$data['consignee_phone']}要求配送时间{$data['demand_time']}
订单备注{$data['remark']}
出库明细
编号货品名称属性单位出货数量实发数量实收数量备注
签收人签收日期

EOD;


    $pdf->writeHTML($tbl, truefalsefalsefalse'');

    // -----------------------------------------------------------------------------

    //Close and output PDF document
    $pdf->Output('出库单_'.date('YmdHis').'.pdf''I');
}

以上是文章全部内容,有学习与经验交流的友友可以加小编为好友。有技术问题可以一起探讨与交流,希望你是学习技术的。

让学习成为一种习惯

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注