You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel生成PDF后前端下载显示空白问题求助

解决PDF下载后空白但页数正确的问题

先按优先级排查:

第一步:确认服务器上的原始PDF文件是否正常

登录服务器找到public/${fileName}.pdf文件,手动打开验证内容:

  • 如果文件本身空白:问题出在docx转PDF环节,跳转到「情况二」处理。
  • 如果文件正常:问题出在后端返回/前端下载环节,跳转到「情况一」处理。

情况一:服务器PDF正常,前端下载后空白

1. 修正后端响应头配置

response()->file()自动识别MIME类型偶尔会出错,手动指定PDF专属响应头:

$pdfPath = public_path($fileName . '.pdf');
return response()->file($pdfPath, [
    'Content-Type' => 'application/pdf',
    'Content-Disposition' => 'attachment; filename="' . $fileName . '.pdf"'
]);

2. 修正前端Axios请求与Blob处理

  • 把Accept头改为application/pdf(后端返回的是文件而非JSON)
  • 创建Blob时必须指定application/pdf类型,避免浏览器解析错误
    修改后的前端代码:
export const generateDocx = (offerData) => async () => {
  await axios({
    method: 'post',
    url: `${process.env.REACT_APP_API_URL2}offer/generate/docx`,
    headers: {
      'Content-Type': 'application/json',
      Accept: 'application/pdf', // 修正Accept头
    },
    responseType: 'arraybuffer', // 此配置保留正确
    data: offerData,
  }).then((res) => {
    // 指定Blob的MIME类型
    const blob = new Blob([res.data], { type: 'application/pdf' });
    const url = window.URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', `${fileName}.pdf`); // 建议与后端文件名保持一致

    document.body.appendChild(link);
    link.click();
    link.parentNode.removeChild(link);
    window.URL.revokeObjectURL(url); // 释放URL对象,避免内存泄漏
  });
};

情况二:服务器上的PDF文件本身空白

1. 验证生成的docx文件

先打开服务器上的${fileName}.docx,确认内容存在且格式正常。如果docx本身空白,优先解决docx生成逻辑问题。

2. 检查docx转PDF的转换引擎

如果使用phpdocx这类库,确保转换引擎配置正确:

  • 以LibreOffice为例,需先在服务器安装LibreOffice,再在代码中指定路径:
$docx->setConverter('libreoffice', '/usr/bin/libreoffice'); // 替换为你的LibreOffice实际路径
$docx->transformDocument($fileName . '.docx', $fileName . '.pdf');
  • 确认服务器已安装转换依赖(如LibreOffice、Ghostscript),且web进程有执行权限。

3. 检查文件路径与权限

确保public_path()指向的目录有写入权限,生成的PDF文件权限设置合理(如0644),保证web进程能正常读取。


内容的提问来源于stack exchange,提问作者Elodie Muller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:55:19