前段时间接到一个优化需求,后台返回的PDF文件(base64)通过前端插件在新的页签展示后,总会在大号字体边缘有毛刺状的“不和谐”, 但后台的文件本身是没有问题的。拿到需求后就在插件的源代码中寻找"drawImage",怀疑是不是对文件进行了压缩。果然,发现了特别多的"drawImage",然后全部改成维持原始大小,满怀信心开启本地服务。结果...
如果真好了,就不会有这个随笔来记录了。

以前只处理过图片格式的base64等文件,心想pdf应该也是大致如此。思路无非就是Blob, FileReader, URL.createObjectURL。有了这些以后,剩下的就是如何处理base64至pdf的Blob。好了,下面就是代码了:
previewPDF (base64) {
const atonCode= atob(base64);
const len = atonCode.length;
let pdf = new Unit8Array(len);
while (len--) {
pdf[len] = atonCode.charCodeAt(len)
}
const file = new Blob([pdf], { type: ''application/pdf });
const url = URL.createObjectURL(file);
if (url) {
window.open(url);
URL.revokeObjectURL(url);
}
}
事实是,果真满足了优化需求。当然了,如此几行代码肯定是无法和几千行源码的插件所能够满足的功能来对比的。首先这压根就没什么可配置的API;其次,就是兼容性的问题,经测试,以上代码在IE浏览器中无效,Chrome需要70+版本;然后就是压缩比例的问题。
如果以上都不考虑,其实还是有替代插件的可能性的,起码打包后的体积下降了不是...