vue 实现PDF下载

该文章介绍了一个Vue.js插件,用于将具有特定class的HTML内容转换为PDF文件。它利用html2canvas进行预渲染,然后通过jspdf创建PDF,支持调整DPI和页面大小以优化输出质量。用户点击按钮即可下载生成的PDF。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖

npm install --save html2canvas
npm install --save jspdf

  1. 模板
<div class="container">
   ... 页面内用
</div>
<button @click="getPdf('文件名')">下载PDF文件</div>
  1. utils创建 htmlToPdf.js
/* 调用getPdf() 打印class类名 'container'中所有样式 */
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'

export default {
    install(Vue, options) {
        Vue.prototype.getPdf = function (htmlTitle) {
            html2Canvas(document.querySelector('.container'), {
                allowTaint: true,
                taintTest: false,
                useCORS: true,
                y: 0, // 对Y轴进行裁切
                // width:1200,
                // height:5000,
                dpi: window.devicePixelRatio * 4, //将分辨率提高到特定的DPI 提高四倍
                scale: 4 //按比例增加分辨率
            }).then(function (canvas) {
                let contentWidth = canvas.width
                let contentHeight = canvas.height
                let pageHeight = contentWidth / 592.28 * 841.89
                let leftHeight = contentHeight
                let position = 0
                let imgWidth = 595.28
                let imgHeight = 592.28 / contentWidth * contentHeight
                let pageData = canvas.toDataURL('image/jpeg', 1.0)
                let PDF = new JsPDF('', 'pt', 'a4')
                if (leftHeight < pageHeight) {
                    PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
                } else {
                    while (leftHeight > 0) {
                        PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
                        leftHeight -= pageHeight
                        position -= 841.89
                        if (leftHeight > 0) {
                            PDF.addPage()
                        }
                    }
                }
                PDF.save(htmlTitle + '.pdf')   // pdf标题
            })
        }
    }
}
  1. main.js 引入
import htmlToPdf from '@/utils/htmlToPdf'

Vue.use(htmlToPdf)
### 使用 Vue 实现 PDF 文件下载功能 在 Vue 项目中实现 PDF 文件的下载功能可以通过多种方式完成。以下是几种常见方法: #### 方法一:使用 `<a>` 标签与 `href` 属性 最简单的方法之一是利用 HTML 的 `<a>` 标签配合 JavaScript 来触发文件下载。 ```html <template> <div> <!-- 下载按钮 --> <button @click="downloadPdf">点击下载</button> <!-- 创建一个隐藏的 a 标签用于实际执行下载操作 --> <a ref="downloadLink" style="display:none;"></a> </div> </template> <script> export default { methods: { downloadPdf() { const link = this.$refs.downloadLink; // 设置链接地址,可以是从服务器获取到的真实路径或者是 Blob 对象 URL link.href = 'https://example.com/path/to/your/file.pdf'; // 如果需要指定保存后的文件名,则设置如下属性 link.download = 'file_name.pdf'; // 触发点击事件以启动下载过程 link.click(); } } } </script> ``` 这种方法适用于已知确切位置的静态资源文件下载[^1]。 #### 方法二:通过 API 请求动态生成 PDF下载 当需要根据用户输入或其他条件动态创建 PDF 文档时,可先向后端发送请求获得 PDF 数据流(通常是 Base64 编码字符串或 ArrayBuffer),再将其转换成浏览器能够识别的形式供用户下载。 ```javascript methods: { async fetchAndDownloadPdf() { try { let response = await axios.get('/api/generate-pdf', { responseType: 'blob' }); const url = window.URL.createObjectURL(new Blob([response.data])); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; a.download = "dynamic_file.pdf"; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); // 清理临时对象 URL } catch (error) { console.error("Failed to generate and download the PDF:", error); } } } ``` 此方案适合于那些依赖实时数据处理的应用场景,在这种情况下,前端仅作为发起者和服务响应接收者的角色存在[^2]。 #### 方法三:集成第三方库如 jsPDFpdfMake 对于更复杂的 PDF 生成功能需求,比如自定义样式、布局等,可以选择引入专门针对此类用途设计的强大工具包——jsPDFpdfMake。这些库允许开发者编写脚本来自动生成高质量的 PDF 报告等内容,并支持导出至本地磁盘。 ```bash npm install jspdf --save // or npm install pdfmake --save ``` 之后按照官方文档指导进行具体配置即可满足特定业务逻辑下的复杂报表生成功能[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值