更新记录
1.0.0(2026-07-19)
首发:自研 编写高性能 PDF 核心(多图合成 PDF / 文本生成 PDF / 读取页数),经 原生绑定层 生成 Kotlin/Swift 绑定,桥接为 uni-a
平台兼容性
uni-app x(5.14)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | 12 | × | × |
nex-pdf —— 高性能 PDF 生成
自研高性能 PDF 核心(多图合成 PDF / 文本生成 PDF / 读取页数 / 合并 PDF / 拆分 PDF),经原生绑定层提供, 桥接层,把能力暴露成 uni-app 可调的 JS API。仅支持 App 端(Android / iOS),H5 / 小程序加载不了原生库。
同一份 utssdk 插件同时支持 uni-app x(uvue) 与 经典 uni-app(vue3),无需分叉。 全部 路径进 / 路径出:传图片 / 字体 / PDF 文件路径,原生层读写文件 → 生成 → 返回结果,避免大 buffer 跨语言边界 / JS。 底层用自研 的 内置 PDF 生成 + 内置图像编解码 + 内置 PDF 引擎,无系统依赖。
API
| JS API | 签名 | 说明 |
|---|---|---|
imagesToPdf |
imagesToPdf(images, dest, pageWidthMm, pageHeightMm, marginMm): PdfResult |
多张图片合成 PDF,每图一页、等比缩放居中;images 为空抛参数错误;pageWidthMm/pageHeightMm ≤0 用 A4(210×297);marginMm 负数归 0。PdfResult.pages = 图片数 |
textToPdf |
textToPdf(text, dest, fontSize, fontPath): PdfResult |
文本生成 PDF(基础分页:按 \n 切行 + 按宽度换行,溢出翻页),A4 页;fontSize ≤0 用 12;fontPath 非空 → 嵌入该 TTF(支持中文),为空 → 内置 Helvetica(仅拉丁字符) |
pdfPageCount |
pdfPageCount(src): number |
读取已有 PDF 的页数(文件不存在 / 非 PDF 抛错) |
mergePdfs |
mergePdfs(srcs, dest): PdfResult |
多个 PDF 按 srcs 顺序合并为一个(重编号对象 id 防碰撞);srcs 为空 / dest 为空抛参数错误;某项不存在 / 非 PDF 抛错。PdfResult.pages = 各输入文档页数之和 |
splitPdf |
splitPdf(src, destDir, prefix): number |
把 src 每页拆成独立单页 PDF 写到 destDir/<prefix>-<n>.pdf(n 从 1 起);返回拆出的页数;src/destDir 为空、src 非 PDF 抛错 |
类型
// imagesToPdf / textToPdf 返回(字段 camelCase)
type PdfResult = { pages: number; sizeBytes: number; costMs: number };
imagesToPdf的images入参为string[](对应 原生Vec<String>)——本仓首个数组入参,桥接层把 UTSstring[]转成 KotlinList<String>/ Swift[String]。- 入参
pageWidthMm/pageHeightMm/marginMm/fontSize以number传入,桥接层校验有限后转Float;允许 ≤0(由 自研核心做「取默认」语义兜底)。 PdfResult.pages:PDF 页数(imagesToPdf= 图片数;textToPdf= 分页后页数)。PdfResult.sizeBytes:写入 PDF 的文件字节数。PdfResult.costMs:只计「生成段」耗时(毫秒,不含磁盘 IO)。- 中文支持:内置 Helvetica 仅覆盖拉丁字符;
textToPdf要排版中文,需通过fontPath传一个中文 TTF 字体路径嵌入。
用法
import {
imagesToPdf,
textToPdf,
pdfPageCount,
mergePdfs,
splitPdf
} from "@/uni_modules/nex-pdf";
// 多图合成 PDF:A4(传 0 用默认)、页边距 10mm
const r = imagesToPdf([imgPathA, imgPathB], destPdfPath, 0, 0, 10);
console.log(r.pages, r.sizeBytes, r.costMs); // 2 ...
// 文本生成 PDF:字号 14,内置字体(仅拉丁);中文则传字体路径
const t = textToPdf("Hello nex-pdf", destPdfPath2, 14, "");
console.log(t.pages, t.sizeBytes, t.costMs);
// 读取已有 PDF 页数(也可对刚生成的 PDF 回读做 round-trip 校验)
const pages = pdfPageCount(destPdfPath); // number
console.log(pages);
// 合并多个 PDF 为一个:pages = 各文档页数之和
const m = mergePdfs([pdfA, pdfB], mergedPdfPath);
console.log(m.pages, m.sizeBytes, m.costMs);
// 按页拆分:destDir/part-1.pdf、part-2.pdf …,返回拆出的页数
const count = splitPdf(srcPdfPath, destDir, "part"); // number
console.log(count);
平台与调试边界
- 仅 app-android / app-ios;H5、各家小程序不支持。
- Android 本地真机调试 原生库 需 HBuilderX ≥ 4.26(自定义调试基座),云打包不受此限。
- iOS 因 原生扩展库 含 Swift,宿主原生工程需开启「支持 Swift」。
- 最终 App 打包由 HBuilderX /
@dcloudioCLI 完成。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12438998
赞赏 1934
赞赏
京公网安备:11010802035340号