php - 生成 PDF 时 Laravel/Angular-POST 500(内部服务器错误)
问题描述
我有一个 Laravel/Angular 应用程序,在其中一个页面上,用户可以选择将有关单个/选择的事务的数据导出到 PDF 文件。
当前生成的 PDF 显示 3 页(第一个页面用于每个实际交易,随后的页面显示有关这些交易所属帐户的更多信息)。
我想为这个特性添加一些功能,这样如果被导出的交易只有一个存款日期,当它的状态是“请求”时,那么实际上应该只生成当前生成的 PDF 的第一页(应该抑制通常生成的 PDF 的其余部分)。
我if
在 Blade.php 文件中添加了一条语句,它显示了 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()
函数写在临时提醒.ts 中:
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
语句generateSingleTransactionPDF()
以某种方式返回错误,但我不确定如何/为什么,或者我将如何调试该错误是什么,以及导致它的原因...?
语句generateSingleTransactionPDFUrl()
内部调用的函数在 prov.service.ts 文件的开头定义:return
.post()
private generateSingleTransactionPDFUrl: string = BASE_URL + '/web-api/t/prov/pdf';
浏览器控制台中显示一个错误,它说:
POST http://... 500(内部服务器错误)
无法解析的响应
这似乎表明该错误是因为 HTTP 请求的响应是不可解析的,但我无法弄清楚为什么会这样......console.log()
我generateSingleTransactionPDF()
在 prov.service.ts 中的函数内放置的语句显示requestOptions
&data
控制台中的变量-它们似乎保存了正确的数据...所以我不确定为什么说响应无法解析-有人有什么想法吗?
编辑
因此,查看日志文件后,我似乎有一个错误:
下一个 ErrorException:未定义变量:/../views/419cdd3906d761bc1bb55581502a15d04c1fe7a7.php:9 中的事务(视图:/.../reminder.blade.php)
这似乎是在抱怨if
我在 Blade.php 文件开头放置的内容:
@if(($transaction->count($transaction['transactionItem']) == 1) && ($transaction['transactionItem']['currentStatusId'] == '1010'))
我将/应该如何$transaction
从 Blade.php 文件中访问此变量?
解决方案
推荐阅读
- scala - scala中带有期货的咖喱函数
- python - Spacy nlp = spacy.load("en_core_web_lg")
- angular - 如何在 Angular 的 get 请求中发送从 post 请求返回的令牌
- python - 内核出现在 jupyter 笔记本中但无法正常工作
- python-3.7 - 安装scikit-extreme时如何解决安装错误?
- excel - excel中的除法公式
- c# - 移出 WPF 窗口时 WPF 拖放 DragDropEffects 发生变化
- reactjs - onClick 事件中的状态没有改变
- jenkins - 如何访问 Jenkins 管道帖子部分中的 git 标签
- c++ - Visual Studio 2019 上的 Windows 筛选平台 API