生成pdf
This commit is contained in:
@@ -15,6 +15,10 @@ class UsedCarController extends BaseController
|
||||
|
||||
protected $service;
|
||||
|
||||
protected $noNeedLogin = ['downloadPdf'];
|
||||
|
||||
protected $noNeedHeaderData = ['downloadPdf'];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->service = new UsedCarService();
|
||||
@@ -68,11 +72,15 @@ class UsedCarController extends BaseController
|
||||
|
||||
}
|
||||
if (!empty($data['attachment'])){
|
||||
$attachments = explode(',', $data['attachment']);
|
||||
//$attachments = explode(',', $data['attachment']);
|
||||
$attachments = json_decode($data['attachment'], true);
|
||||
$ossService = new OssService();
|
||||
$attachment_pull = [];
|
||||
foreach ($attachments as $attachment){
|
||||
$attachment_pull[] = $ossService->generatePrivateUrl($attachment);
|
||||
$attachment_pull[] = [
|
||||
'name'=>$attachment['name'],
|
||||
'src'=>$ossService->generatePrivateUrl($attachment['src'])
|
||||
];
|
||||
}
|
||||
$data['attachment_pull'] = $attachment_pull;
|
||||
|
||||
@@ -101,10 +109,24 @@ class UsedCarController extends BaseController
|
||||
$images[] = $this->service->downloadImage($image);
|
||||
}
|
||||
$data['images'] = $images;
|
||||
|
||||
$attachments = [];
|
||||
foreach ($data['attachment_pull'] as $attachment){
|
||||
// 方法1:使用 pathinfo
|
||||
$path = parse_url($attachment['src'], PHP_URL_PATH); // 获取路径部分
|
||||
$extension = pathinfo($path, PATHINFO_EXTENSION); // 获取扩展名
|
||||
|
||||
if (strtolower($extension) === 'pdf') { //如果是pdf则下载到本地
|
||||
$attachments[] = $this->service->downloadAttachment($attachment['src']);
|
||||
}
|
||||
}
|
||||
$data['attachment'] = $attachments;
|
||||
|
||||
$pdf = (new MpdfDriver())->exportUsedCarPdf($data);
|
||||
UsedCar::where('id', $data['id'])->update(['pdf_src' => $pdf]);
|
||||
|
||||
array_map('unlink', glob(runtime_path('pdf/images/*.jpg')));
|
||||
array_map('unlink', glob(runtime_path('pdf/attachment/*.pdf')));
|
||||
return $this->success($pdf);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->error($e->getMessage().$e->getLine().$e->getFile());
|
||||
@@ -113,15 +135,15 @@ class UsedCarController extends BaseController
|
||||
|
||||
public function downloadPdf(Request $request){
|
||||
$raw = $this->service->serviceShow($request);
|
||||
$filePath = runtime_path('pdf') . $raw['pdf_src'];
|
||||
$filePath = runtime_path('pdf') .'/'. $raw['pdf_src'];
|
||||
|
||||
if (!file_exists($filePath)) {
|
||||
return response('文件不存在', 404);
|
||||
return response($filePath.'文件不存在', 404);
|
||||
}
|
||||
|
||||
return response()->download(
|
||||
$filePath,
|
||||
$raw['product_name'].'-'.$raw['id'].'pdf' // 下载时显示的文件名
|
||||
$raw['product_name'].'-'.$raw['id'].'.pdf' // 下载时显示的文件名
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -94,6 +94,9 @@ class UsedCarService
|
||||
if(empty($data['price'])){
|
||||
$data['price'] = 0;
|
||||
}
|
||||
if(!empty($data['attachment'])){
|
||||
$data['attachment'] = json_encode($data['attachment']);
|
||||
}
|
||||
$data['user_id'] = $request->user['id'];
|
||||
return $data;
|
||||
}
|
||||
@@ -268,4 +271,22 @@ class UsedCarService
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
function downloadAttachment(string $url): string
|
||||
{
|
||||
$dir = runtime_path('pdf/attachment/');
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0755, true);
|
||||
}
|
||||
|
||||
$filename = md5($url) . '.pdf';
|
||||
$path = $dir . $filename;
|
||||
|
||||
if (!file_exists($path)) {
|
||||
$img = file_get_contents($url);
|
||||
file_put_contents($path, $img);
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ class PdfController
|
||||
public function previewFromFile(Request $request): Response
|
||||
{
|
||||
// 你的模板路径(示例)
|
||||
$tpl = base_path('resource/templates/stock-order.html');
|
||||
$tpl = base_path('resource/templates/usedCar.html');
|
||||
// 可选:把 {{变量}} 替换
|
||||
$html = PdfHelper::loadTemplate($tpl, [
|
||||
'title' => '备货单',
|
||||
|
||||
@@ -156,14 +156,34 @@ class MpdfDriver
|
||||
|
||||
$mpdf->WriteHTML($html);
|
||||
|
||||
foreach ($car['attachment'] as $attachment) {
|
||||
$this->appendPdf($mpdf,$attachment);
|
||||
}
|
||||
|
||||
$pdf = $mpdf->Output('车辆详情.pdf', 'S');
|
||||
$dir = runtime_path('pdf');
|
||||
if (!is_dir($dir)) mkdir($dir, 0777, true);
|
||||
$pdfName = '/invoice-' . date('YmdHis').'-'.$car['id'] . '.pdf';
|
||||
$path = $dir . $pdfName;
|
||||
$pdfName = 'invoice-' . date('YmdHis').'-'.$car['id'] . '.pdf';
|
||||
$path = $dir . '/' . $pdfName;
|
||||
file_put_contents($path, $pdf);
|
||||
|
||||
return $path;
|
||||
return $pdfName;
|
||||
}
|
||||
|
||||
public function appendPdf(Mpdf $mpdf, string $pdfPath)
|
||||
{
|
||||
$pageCount = $mpdf->SetSourceFile($pdfPath);
|
||||
for ($i = 1; $i <= $pageCount; $i++) {
|
||||
$tplId = $mpdf->ImportPage($i);
|
||||
$size = $mpdf->getTemplateSize($tplId);
|
||||
|
||||
$mpdf->AddPageByArray([
|
||||
'orientation' => $size['orientation'],
|
||||
'sheet-size' => [$size['width'], $size['height']]
|
||||
]);
|
||||
|
||||
$mpdf->UseTemplate($tplId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace app\process;
|
||||
|
||||
use app\common\model\UsedCar;
|
||||
use support\Db;
|
||||
use support\Log;
|
||||
use Workerman\Crontab\Crontab;
|
||||
|
||||
class Task
|
||||
{
|
||||
|
||||
public function onWorkerStart()
|
||||
{
|
||||
// 每天三点删除pdf
|
||||
new Crontab('0 0 3 * * *', function(){
|
||||
// echo date('Y-m-d H:i:s') . "\n";
|
||||
Log::info('send follow start',[time()]);
|
||||
|
||||
Db::table('used_car')
|
||||
->update(['pdf_src' => '']);
|
||||
|
||||
array_map('unlink', glob(runtime_path('pdf/*.pdf')));
|
||||
|
||||
Log::info('send follow end',[time()]);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -60,4 +60,7 @@ return [
|
||||
]
|
||||
]
|
||||
],
|
||||
'task' => [
|
||||
'handler' => app\process\Task::class
|
||||
],
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user