如何使用pdfMake将文件保存到指定文件夹?
让pdfMake生成的PDF保存到指定文件夹的方法
首先明确:浏览器出于安全机制限制,纯前端代码没办法直接指定文件的下载路径,所有网页触发的下载,最终保存位置要么是浏览器默认下载文件夹,要么是用户手动在弹窗里选择的路径——这是浏览器为了防止恶意网站随意读写本地文件做的限制。
针对你的现有代码,给你两种可行的处理方式:
1. 触发手动选择保存路径的弹窗
通过手动生成Blob并创建下载链接,让浏览器弹出保存对话框,引导用户选择想要保存的文件夹。修改后的代码如下:
$scope.exportpdf = function () { html2canvas(document.getElementById('exportpdf'), { onrendered: function (canvas) { var data = canvas.toDataURL(); var docDefinition = { content: [{ image: data, width: 500, }] }; // 获取PDF的Blob对象 pdfMake.createPdf(docDefinition).getBlob(function(blob) { // 创建临时下载链接 const downloadUrl = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = downloadUrl; link.download = 'file.pdf'; // 把链接加入页面并触发点击 document.body.appendChild(link); link.click(); // 清理临时资源 document.body.removeChild(link); URL.revokeObjectURL(downloadUrl); }); } }); }
2. 桌面应用场景下自动保存到指定路径
如果你是在Electron这类可以访问本地文件系统的桌面应用里开发,那就可以借助Node.js的文件系统模块,直接把生成的PDF写入指定文件夹。代码示例(Electron环境):
const fs = require('fs'); const path = require('path'); $scope.exportpdf = function () { html2canvas(document.getElementById('exportpdf'), { onrendered: function (canvas) { var data = canvas.toDataURL(); var docDefinition = { content: [{ image: data, width: 500, }] }; pdfMake.createPdf(docDefinition).getBlob(function(blob) { // 将Blob转为Buffer并写入指定路径 blob.arrayBuffer().then(buffer => { // 替换成你想要的本地文件夹路径 const targetPath = path.join('D:/MyPDFs', 'file.pdf'); fs.writeFileSync(targetPath, Buffer.from(buffer)); console.log('PDF已自动保存到指定文件夹'); }); }); } }); }
总结一下:纯网页环境下只能引导用户手动选路径;只有在拥有本地文件系统权限的桌面应用中,才能实现自动保存到指定文件夹。
内容的提问来源于stack exchange,提问作者Meet Shah
相关产品推荐
相关产品推荐

