vue.js - 如何从 vuejs 下载在 laravel 中生成的 pdf?
问题描述
我在laravel中有以下函数来生成pdf
public function download_agreement(Request $request){
try{
/* $items = DB::table("items")->get();
view()->share('items',$items); */
if ($request->has('download')) {
$pdf = PDF::loadView('pdf.agency.agreement');
return $pdf->download('pdfview.pdf');
}
$pdf = PDF::loadView('pdf.agency.agreement');
return view('pdfview');
}
catch(\Exception $error){
Log::error('[RegistrantsController] error in send_agreement ' . $error);
return response()->json(['code' => 403, 'message' => 'Something went wrong']);
}
}
然后我正在执行以下操作:
downloadAgreement() {
console.log("DOWNLOAD");
let sendData = {
uuid: this.$route.params.uuid,
email: "email@gmail.com",
download: true
};
axios
.post(config.routePrefix + "/agency/download_agreement", sendData)
.then(response => {
console.log(response);
const url = window.URL.createObjectURL(new Blob([response.data]));
console.log(url);
const link = document.createElement("a");
link.href = url;
link.setAttribute("download", "file.pdf");
document.body.appendChild(link);
link.click();
})
.catch(error => {
console.log(error);
});
}
我生成了pdf并设法下载了它。我遇到的问题是它向我显示了空白的pdf。在我的 .blade 文件中:
@extends('pdf.layout')
@section('style')
<style>
.agreement-text {
margin-left: 7%;
margin-right: 7%;
}
.sign-line{
align-self: center;
width: 60%;
border-bottom: 1px solid black;
}
.ql-align-justify{
text-align: justify;
}
.ql-align-center{
text-align: center;
}
.header-line{
border: none;
height: 3px;
color: #a1d138 ;
background-color: #a1d138 ;
}
</style>
@stop
@section('content')
<header>
{{-- <img style="width: 30%;" src="{{ config('arm.arm_app.email_pdf_logo') }}"> --}}
<hr class="header-line">
</header>
<div class="agreement-text">
TEST TEST TEST TEST
</div>
<div class="img-div">
{{-- <img class="img-center" src="{{$sign}}"> --}}
</div>
<div class="img-div">
<hr class="sign-line">
Nombre
</div>
@stop
目前我没有发送任何数据,我只是想轻松地生成带有文本的 pdf
解决方案
假设$pdf->download
已经返回正确的标题,最简单的解决方案是向用户显示指向该 URL 的链接,用户可以单击该链接。如果页面上可能有未保存的内容(例如表单),请确保在新选项卡中打开它。
您也可以使用 JS 打开一个弹出窗口。据我所知,所有浏览器都会显示保存提示,然后关闭选项卡。
推荐阅读
- angular - ./node_modules/ng-select2/fesm5/ng-select2.js 中的错误模块构建失败,TypeError:无法读取未定义的属性“种类”
- sql - SQL:计算每个客户的操作
- c++ - 如何针对提取器隐藏/保护资源文件?
- node.js - Auth0 Express 服务器问题在单独的文件中保护路由
- database - DeltaLake:如何在数据集之间进行无限时间旅行?
- azure-devops - Azure DevOps 直接访问代理环境变量
- http - Multipart 和 MIME 内容类型有什么区别?
- terraform - 为什么我在 Terraform 中收到 random_id b64 属性的错误?
- mysql - mysql在使用二级索引时如何锁定我的数据?
- python - pip升级无法安装包