如何在Symfony控制器中设置返回PDF的页面标题 无需修改现有路由
解决方案
方案1:修改PDF元数据(零代码改动,最便捷)
浏览器内置PDF阅读器会优先读取PDF文件本身的文档元数据作为页面标题,你只需要用任意PDF编辑工具打开User_Agreement.pdf,修改文档属性里的「标题」字段为User_Agreement.pdf保存即可,不需要修改任何代码,原有路由和逻辑完全不变。
方案2:用Twig渲染HTML嵌入PDF(完全可控标题)
如果不想修改PDF文件,可以调整控制器逻辑,返回嵌入了PDF的HTML页面,直接自定义页面标题,不需要修改路由配置:
- 调整控制器代码:
/** * @Route("/bilgi/agr", name="user_agreement") */ public function agr(): Response { $pdfFileName = 'User_Agreement.pdf'; return $this->render('pdf_viewer.html.twig', [ 'pdf_path' => '/docs/' . $pdfFileName, 'page_title' => $pdfFileName ]); }
- 新建Twig模板
templates/pdf_viewer.html.twig:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{{ page_title }}</title> <style> * { margin: 0; padding: 0; } html, body { height: 100%; width: 100%; } /* 让PDF铺满全屏,和直接打开PDF的体验完全一致 */ embed { width: 100%; height: 100%; border: none; } </style> </head> <body> <embed src="{{ pdf_path }}" type="application/pdf"> </body> </html>
问题原因说明
你直接返回BinaryFileResponse时,浏览器标题栏不会读取Content-Disposition里的filename参数(这个参数只控制下载时的默认文件名),如果PDF本身没有设置元数据标题,浏览器会默认取URL路径的最后一段agr作为页面标题。
内容的提问来源于stack exchange,提问作者Anarkie
相关产品推荐
相关产品推荐

