我有一个Laravel / Angular应用程序,在其中一个页面上,用户可以选择将有关单个交易/选择的交易的数据导出到PDF文件。
当前生成的PDF显示3页(第一页用于每个实际交易,随后的页面显示有关这些交易所属帐户的更多信息)。
我想为此功能添加一些功能,这样,如果要导出的交易仅针对该交易有一个存款日期,则当其状态为“请求”时,则实际上只有当前生成的PDF的第一页是生成的(通常应生成的PDF的其余部分应删除)。
我已在Blade.php文件中添加了if
语句,该语句显示PDF的内容如下:
@if(($transaction->count($transaction['transactionItem']) == 1) && ($transaction['transactionItem']['currentStatusId'] == '1010'))
<body ... >
// Content of first page of PDF here
</body>
@else
<body ... >
// Original content of full PDF here
</body>
@endif
在HTML中,带有调用该功能以下载PDF的链接的菜单项写为:
<td class="provActionsCell contactAddressCell text-center table__priority-column" id="reduceWidth-doublePlus" dropdown>
<a href class="icon icon-kog" dropdownToggle></a>
<ul class="dropdown-menu" aria-labelledby="angular-simple-dropdown">
...
<li *ngIf="payer.provStatusTag !== 'NA'" (click)="exportSingleTransactionToPDF(payer)"><a href="">Download PDF</a></li>
</ul>
</td>
exportSingleTransactionToPDF()
函数使用以下命令在临时提醒中编写:
exportSingleTransactionToPDF(payer) {
let requestData = (<any>Object).assign({});
console.log("requestData: ", requestData);
payer.loading = true;
requestData['transactionItem'] = payer;
console.log("requestData['transactionItem']: ", requestData['transactionItem']);
this.provService.generateSingleTransactionPDF(requestData).subscribe(
(data:any) => {
payer.loading = false;
this.showPrintDialog = false;
},
(error:any) => {
const message = new Message();
message.type = MessageType.ERROR;
message.message = error.message || 'There was a problem generating the PDF.';
this.messagingService.emitMessage(message);
payer.loading = false;
}
);
return false;
}
及其调用的generateSingleTransactionPDF()
函数在prov.service.ts
中定义为:
generateSingleTransactionPDF(data: any): Observable<any> {
const requestOptions = new RequestOptions({ headers: this.pdfHeaders, responseType: ResponseContentType.Blob });
console.log("requestOptions: ", requestOptions);
console.log("data: ", data);
return this.http
.post(this.generateSingleTransactionPDFUrl, data, requestOptions)
.map((res: Response) => {
const blob = <Blob>res.blob();
FileSaver.saveAs(blob, `provisional-tax-reminder.pdf`);
})
.catch(this.handleError);
}
当前,当我尝试下载PDF时,我可以看到控制台中显示了一些已添加的调试信息,表明正在调用这些函数,然后在浏览器中显示一条错误标语:
生成PDF时出现问题
显然来自exportSingleTransactionToPDF()
函数,因为这是该错误消息出现在项目中的唯一位置。当对generateSingleTransactionPDF()
函数调用的调用返回错误时,抛出此错误,因此很明显,return
的{{1}}语句以某种方式返回错误,但是我不确定如何/为什么,或者我将如何调试该错误是什么,以及导致它的原因...?
在generateSingleTransactionPDF()
语句的generateSingleTransactionPDFUrl()
中调用的return
函数是在prov.service.ts文件的开头定义的,
.post()
浏览器控制台中显示错误,提示:
POST http:// ... 500(内部服务器错误)
无法解释的反应
这似乎表明该错误是因为HTTP请求的响应不可解析,但是我无法弄清楚为什么会是这种情况……我在{{ prov.service.ts中的1}}函数在控制台中显示private generateSingleTransactionPDFUrl: string = BASE_URL + '/web-api/t/prov/pdf';
和console.log()
变量-它们似乎保存了正确的数据...所以我不确定为什么要说回应无法解释-任何人有任何想法吗?
修改
因此,在查看了日志文件后,似乎出现了一个错误消息:
下一个ErrorException:未定义的变量:/../ views / 419cdd3906d761bc1bb55581502a15d04c1fe7a7.php:9
中的事务(视图:/.../reminder.blade.php)
似乎是在抱怨我在Blade.php文件开头放置的generateSingleTransactionPDF()
:
requestOptions
如何/应该如何从blade.php文件内部访问此data
变量?