博客
关于我
解决pdf.js下载PDF文件名称中文乱码和不带.pdf后缀名问题
阅读量:654 次
发布时间:2019-03-15

本文共 1139 字,大约阅读时间需要 3 分钟。

解决pdf.js下载PDF文件名称中文乱码和不带.pdf后缀名问题

作为一名开发者,我遇到了一个棘手的问题:使用pdf.js预览并下载PDF文件时,文件名出现了中文乱码,并且偶尔文件名中缺少.pdf后缀。这让我不得不深入调查问题根源,并找到解决方法。

首先,我需要明确问题的具体表现。我在使用pdf.js预览文件02010204_钢筋安装检验批质量验收记录_02010204016.pdf时,点击下载按钮,生成的文件名确实有问题。从截图可以看出,文件名中的中文部分不复读,呈现为乱码符号,而英文字符则正常。此外,部分情况下,下载的文件名缺少了.pdf后缀,这使得我无法直接打开文件,需要手动添加。

我尝试了多种解决方法,包括在URL中添加encodeURIComponent()处理,以及在viewer.js中设置charset="gb2312"。这些方法在理论上都应能解决问题,但在实际应用中,仅仅对URL进行编码似乎并未解决乱码问题,且文件名的编码和解码并未带来明显的变化。

深入分析,我发现viewer.js已经对文件名进行了编码处理,因此下载文件名是已经经过编码后的版本。为此,我需要对文件名进行解码,使用JavaScript的decodeURIComponent()方法。

更深入的探究发现,问题的根源在于下载逻辑中存在编码过程,因此必须在下载前对文件名进行解码处理。具体来说,我需要找到viewer.js中的_download()方法,修改其逻辑,确保在下载前对文件名进行解码,并在解码后的文件名基础上,检查是否需要添加.pdf后缀。

在解决乱码问题的同时,我还需要处理文件名缺少.pdf后缀的问题。为此,在解码后检查文件名是否带有.pdf后缀,若没有,则在下载时自动添加。可以通过以下逻辑实现:

filename = decodeURIComponent(filename);if (!filename.endsWith('.pdf')) {    filename += '.pdf';}a.download = filename;

此外,为确保文件在下载时以正确的MIME类型显示,可以在a标签中指定type="application/pdf"

验证过程中,确保解码后的文件名能够正确显示,同时随文件下载时自动带上.pdf后缀。如果发现文件名依然隐藏,可能需要检查系统设置,确保文件扩展名不被隐藏。

总结来说,解决此问题的关键是理解文件名编码和解码的过程,并在合适的时机对文件名进行解码处理。入门级开发者可能需要全面理解pdf.js的内部逻辑,才能有效对问题进行修复。通过这些步骤,我成功解决了文件名乱码和缺少.pdf后缀的问题,这对于提高用户体验非常重要。

转载地址:http://uldmz.baihongyu.com/

你可能感兴趣的文章
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
vue3+Element-plus icon图标无法显示的问题(已解决)
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
nodejs支持ssi实现include shtml页面
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>