如何设置Mozilla PDF.js打印对话框中的文件名?
解决PDF.js v3.5.141打印时默认文件名固定为“PDF.js viewer.pdf”的问题
你遇到的问题是因为setTitleUsingUrl仅修改了浏览器标题,而PDF.js的打印功能依赖内部的documentFileName属性生成默认打印文件名,而非页面标题。以下是两种可行的解决方法:
方法一:直接设置documentFileName属性
在你现有代码中添加对documentFileName的赋值,PDF.js打印时会优先使用这个值作为默认文件名:
setTimeout(() => { const pdfFileName = "你的PDF文件名.pdf"; // 替换为实际文件名 // 设置浏览器标题 PDFViewerApplication.setTitleUsingUrl(pdfFileName); // 设置打印时的默认文件名 PDFViewerApplication.documentFileName = pdfFileName; }, 1000);
这个方法直接修改PDF.js应用实例的核心属性,适配v3.5.141版本的API逻辑,是最直接的解决方案。
方法二:重写打印方法(兜底方案)
如果方法一未生效,可以重写PDF.js的打印函数,确保触发打印前强制设置正确的文件名:
setTimeout(() => { const pdfFileName = "你的PDF文件名.pdf"; // 替换为实际文件名 PDFViewerApplication.setTitleUsingUrl(pdfFileName); // 保存原打印方法 const originalPrint = PDFViewerApplication.print; // 重写打印方法 PDFViewerApplication.print = function() { this.documentFileName = pdfFileName; // 调用原打印逻辑 originalPrint.call(this); }; }, 1000);
这种方式通过拦截打印操作,确保每次打印时都注入正确的文件名,避免因异步加载或其他逻辑覆盖documentFileName的情况。
注意事项
- 确保
setTimeout的延迟足够覆盖PDFViewerApplication的初始化,若1000ms不够,可适当调整时长; - 文件名需包含
.pdf后缀,避免打印对话框自动补全错误的扩展名。
内容的提问来源于stack exchange,提问作者Kruzstof Wren
相关产品推荐
相关产品推荐

