vue-pdf-export:为 Vue 3 打造的浏览器端 PDF 工作流
译注:本文编译自 dev.to 上作者 saurabhzaiswal 发布的项目介绍,原文标题为《Building Better PDF Workflows in Vue 3 with vue-pdf-export》,原文链接见文末。文章为作者自述其开源项目的能力与用法,以下内容忠实于原文。
Vue 生态中又添一个面向文档导出的工具库。开发者 saurabhzaiswal 在 dev.to 上介绍了 vue-pdf-export——一个基于 Vue 3 与 TypeScript、可直接在浏览器中生成 PDF 的包。作者表示,做这个项目的起因是他在不同 Vue 项目中反复重写同一批 PDF 功能:分页、预览、打印、页眉页脚、进度处理以及长文档支持,于是决定将其抽象为一个可复用的库。
功能覆盖
根据作者列出的清单,vue-pdf-export 目前支持以下能力:
- Canvas 渲染,以及可选中、可搜索的 PDF 文本
- 自动与手动分页
- 预览、下载与浏览器打印
- 页眉与页脚
- 水印
- 密码保护与 PDF 权限控制
- 可点击链接
- 进度上报与取消操作
- Blob、ArrayBuffer 与 Base64 三种输出格式
- 仅用于导出的样式,以及
data-pdf-ignore忽略标记 - Nuxt 3 与 Nuxt 4 的 SSR 安全导入
其中「可选中、可搜索的文本」与「SSR 安全导入」是这类浏览器端 PDF 方案中较受关注的两点:前者关系到导出文档的可用性,后者则决定了它能否直接用于 Nuxt 服务端渲染环境而不触发构建或运行时报错。
安装与示例
安装方式为常规的 npm 安装:
npm install vue-pdf-export作者给出的最小示例如下,通过组件 ref 调用 generatePdf(),内容以 #pdf-content 插槽传入:
<script setup lang="ts">
import { ref } from 'vue'
import { Html2Pdf } from 'vue-pdf-export'
import 'vue-pdf-export/style.css'
const pdfRef = ref<InstanceType<typeof Html2Pdf> | null>(null)
</script>
<template>
<button @click="pdfRef?.generatePdf()">
Generate PDF
</button>
<Html2Pdf ref="pdfRef" filename="report.pdf">
<template #pdf-content>
<h1>Hello from Vue</h1>
<p>This content will be exported to PDF.</p>
</template>
</Html2Pdf>
</template>从 API 形态看,该库采用「组件包裹内容 + 插槽声明导出范围」的方式,而非纯函数式调用,这与 Vue 的模板心智较为一致,也便于把页面上已有的 DOM 结构直接纳入导出范围。
相关资源
作者提供了在线体验与文档入口:
- Playground:https://vue-pdf-export-playground.vercel.app/
- 文档:https://vue-pdf-export-docs.vercel.app/
- npm:https://www.npmjs.com/package/vue-pdf-export
作者寻求的反馈
作者在文末表示,希望获得在生产环境中处理过 PDF 的 Vue 开发者的反馈,重点关注分页、大文档、可选中文本以及 API 使用体验(API ergonomics)这几个方向。对于正在评估浏览器端 PDF 方案的团队而言,这几个点也恰好是实际落地时最容易踩坑的地方。
原文链接
https://dev.to/saurabhzaiswal/building-better-pdf-workflows-in-vue-3-with-vue-pdf-export-9ed