rust(pdfium)底层开发实现wasm包给vue3调用

前言

遇到一个业务需求,就是要进行浏览器的PDF功能开发,研究之后发现是使用PDFium进行的,分win/linux/android/ios,还有一个wasm(给浏览器)

开始

你可以下载PDFium进行二次编译,生成你需要的文件,然后在使用rust进行调用开发

也可以来到这个地址下载对应的安装包

这篇不讲C++编译如何操作,感兴趣可以自行AI一下

因为可能涉及偏隐秘的东西,我是想开源码的,但是最后还是算了,显示项目架构即可。

效果图

调用链

复制代码
Vue 3 阅读器界面
        ↓
TypeScript 渲染与交互层
        ↓
wasm-bindgen 生成的接口
        ↓
Rust PDF 核心模块
        ↓
pdfium-render
        ↓
PDFium 引擎

项目架构

复制代码
pdf-project/
├── rust-pdf/                       # Rust PDF 核心与 WASM 接口
│   ├── src/
│   │   ├── lib.rs                 # WASM 对外接口入口
│   │   ├── document.rs            # PDF 文档加载、信息读取与生命周期管理
│   │   ├── page.rs                # PDF 页面相关操作
│   │   ├── renderer.rs            # 页面渲染与像素数据生成
│   │   ├── text.rs                # 文本提取与全文搜索
│   │   ├── annotation.rs          # 高亮、下划线等批注管理
│   │   └── error.rs               # 错误类型与异常转换
│   ├── Cargo.toml                 # Rust 包、依赖及编译配置
│   └── 使用.md                    # Rust 模块使用说明
│
├── vue3-pdf-viewer/               # Vue 3 PDF 阅读器
│   ├── src/
│   │   ├── components/
│   │   │   └── PdfViewer.vue      # PDF 阅读器核心界面
│   │   ├── main.ts                # Vue 应用入口
│   │   ├── App.vue                # 根组件
│   │   ├── wasm.ts                # Rust WASM 初始化与接口封装
│   │   ├── renderer.ts            # 前端 PDF 渲染流程
│   │   ├── canvas.ts              # Canvas 绘制与操作
│   │   ├── annotation.ts          # 前端批注交互
│   │   ├── worker.ts              # Web Worker 后台处理
│   │   └── env.d.ts               # TypeScript 环境声明
│   ├── public/
│   │   ├── pkg/                   # Rust 生成的 WASM JS 绑定
│   │   ├── pdfium.js              # PDFium JavaScript 加载器
│   │   └── pdfium.wasm            # PDFium WebAssembly 模块
│   ├── index.html                 # HTML 入口
│   ├── package.json               # 前端依赖及脚本
│   ├── tsconfig.json              # TypeScript 配置
│   └── vite.config.ts             # Vite 构建配置
│
├── README.md                      # 项目介绍、接口和构建说明
└── 需求文档.md                    # 项目需求与功能规划
相关推荐
2601_966949651 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin1 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
滕州市燕猫虎计算机科技工作室个体工商户2 小时前
Java锁
java·开发语言
多加点辣也没关系2 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2332 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21032 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
零依赖极客3 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
新时代牛马4 小时前
cyclictest 毛刺从哪来?从ftrace、latencytop、perf到IRQ/调度延迟定位
android·开发语言·python·kotlin
三8444 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
传奇开心果编程5 小时前
【Xilem基础语法学与练】第7课:Xilem与Masonry底层构建技术解析
学习·rust·前端框架