前端通过ajax获取base64转blob下载PDF方法

更新日期: 2020-01-31阅读: 2.7k标签: pdf

我们通常下载文件的方式无非后端给一个生成文件链接, 前端通过a标签或者iframe的方式去下载,这种方式的弊端是无法监测到文件是否下载完成,无法给用户友好的提示,以避免用户短时间内重复点击下载.

如果我们能用Ajax从后端拿到PDF的相关数据,再在前端下载成PDF就可以解决这个问题,那么新的问题是:

1. 前端如何下载PDF?

2. 后端给什么格式的数据?

针对第一个问题很简单:将通过URL.createObjectURL()函数将blob对象生成url,并添加到a标签上即可解决.

问题转化成后端给什么格式数据我们通过ajax请求获取之后可以转化成blob? base64是一个可行的方案.


具体解决方案如下:

1. 将base64转化成blob方法

function convertBase64ToBlob(base64, fileType, slice) {
return new Blob(atob(base64)
.match(new RegExp(`([\\s\\S]{${slice}})|([\\s\\S]{1,${slice}})`, 'g'))
.map(function(item){
return new Uint8Array(item.split('').map(function(s, i) {
return item.charCodeAt(i)
}))
}), {type: fileType})
}

 2. 前端下载PDF  

const blob = convertBase64ToBlob(data, 'application/pdf', 1024)
if (navigator.msSaveBlob) {
return navigator.msSaveBlob(blob, '1.pdf');
}
const urlFromBlob = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = urlFromBlob;
a.download = '1.pdf';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(urlFromBlob);
document.body.removeChild(a)



链接: https://fly63.com/article/detial/8813

怎么使用pdf.js,html5在浏览器直接打开pdf文档

pdf.js是一款开源的pdf文档读取解析插件,据说在HTML5下诞生的,对于主流的浏览器基本都支持。pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责核心解析。

js实现html转pdf+html2canvas.js截图不全的问题

最近做项目中遇到要把整个页面保存为PDF文件,网上找了一下实现的方法都是 html2canvas.js+jsPdf.js 来实现。实现的过程是 先用html2canvas.js把html页面转成图片,再用jsPdf.js把图片导出为pdf。

把HTML转成PDF的4个方案及实现

因此与原始的 React 页面相比,PDF 中应该有不同的样式和额外的内容。由于这个任务比用简单的 CSS 规则解决要复杂得多,所以我们先探讨了可能的实现方法。我们找到了 3 个主要解决方案。这篇博文将指导你了解它们的可能性并最终实施。

使用pdfjs插件在线预览PDF文件

本文介绍在html中使用 pdfjs插件在线预览PDF文件的方法。到PDFJS官网下载pdfjs插件包,注意下载Stable稳定版的包。将下载的压缩包解压并放入项目中。在 iframe 标签中使用。

如何实现高性能的在线 PDF 预览

最近接到产品需求,用户需要在我们的站点上在线查看 PDF 文件,并且查看时,用户可以对 PDF 文件的进行旋转、缩放、跳转到指定页码等操作。这个太简单了,随便找找就一堆轮子。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!