更新记录
1.0.14(2026-04-27)
文档更新:补充 HarmonyOS 加密试用版手动补充 module.har 的临时兼容说明,便于试用用户在 HBuilderX 未自动复制 HAR 时继续完成构建验证。
1.0.13(2026-04-27)
- 新增 HarmonyOS 平台支持
- 优化 HarmonyOS 网页/HTML 打印方案
- 更新 HarmonyOS 使用说明
- 补充 HarmonyOS
module.har,用于插件市场试用/加密包导入后本地构建依赖
1.0.12(2026-04-26)
- 新增 HarmonyOS 平台支持
- 优化 HarmonyOS 网页/HTML 打印方案
- 更新 HarmonyOS 使用说明
平台兼容性
uni-app(5.07)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | √ | - | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.07)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | √ | √ | √ | - |
hens-print
当前版本:v1.0.14
插件简介
hens-print 是一个 uni-app / uni-app X App 端打印插件,提供 PDF、图片、网页 URL、HTML 字符串、多图片打印、文件可打印性检查、调试日志和统一错误码。
注意:
success回调表示系统打印任务已创建、提交或打印面板流程完成,不等同于纸张已经真实打印完成。实际打印结果仍受系统打印服务、打印机状态和用户操作影响。
功能特性
- PDF 文档打印:支持本地 PDF 文件打印。
- 图片打印:支持常见图片格式,具体格式按平台略有差异。
- 多图片打印:Android / iOS 支持按每页 1、2、4 张排版;HarmonyOS 当前不应用布局参数。
- 网页打印:支持通过 URL 加载网页后调用系统打印,可配置超时时间和渲染等待。
- HTML 内容打印:支持直接打印 HTML 字符串,Android / iOS 可通过
baseUrl解析相对资源。 - 图表页辅助:Android 支持通过选择器控制图表页的打印时机。
- 文件检查与错误码:提供
isPrintableSync初筛能力和统一错误回调。 - 调试日志:可动态开启或关闭打印调试日志。
支持平台与版本
- 支持:uni-app App 端 Android / iOS / HarmonyOS。
- 支持:uni-app X App 端 Android / iOS / HarmonyOS。
- 不支持:H5、小程序、快应用。
版本要求:
- HBuilderX
>= 3.6.8 - uni-app
>= 4.75 - uni-app X
>= 4.75 - Android
minSdkVersion >= 21 - iOS
deploymentTarget >= 12 - HarmonyOS
apiLevel >= 9
平台能力矩阵
| 能力 | Android | iOS | HarmonyOS | 说明 |
|---|---|---|---|---|
| PDF 打印 | 支持 | 支持 | 支持 | 本地文件路径 |
| 单图片打印 | PNG / JPG / JPEG / BMP | PNG / JPG / JPEG / GIF / BMP / TIFF | PNG / JPG / JPEG / GIF / BMP / TIFF | Android 当前不支持 GIF / TIFF |
| 多图片打印 | 支持排版 | 支持排版 | 支持 | HarmonyOS 当前不应用布局参数 |
| 网页 URL 打印 | 支持 | 支持 | 支持 | 支持 URL 加载后打印 |
| HTML 字符串打印 | 支持 | 支持 | 支持 | HarmonyOS 当前不应用 baseUrl |
renderDelay |
支持 | 支持 | Web 支持 | 单位为毫秒 |
printReadySelector |
支持 | 支持 | 暂不支持 | 用于等待指定节点可见 |
chartContainerSelector |
支持 | 暂不支持 | 暂不支持 | Android 用于指定图表容器 |
autoRotateLandscapeImage |
支持 | 支持 | 暂不支持 | HarmonyOS 当前忽略该参数 |
| 调试日志 | 支持 | 支持 | 支持 | setDebugLog / getDebugLogStatus |
安装方式
请通过 DCloud 插件市场安装:
- 在 HBuilderX 中打开项目,进入插件市场搜索
hens-print。 - 选择“导入插件”/“下载插件”,将插件安装到当前项目的
uni_modules/hens-print。 - 在页面中按需导入插件方法。
HarmonyOS 使用配置
HarmonyOS 使用打印能力时,需要在应用 entry 模块声明 ohos.permission.PRINT。
如果项目已经有 entry 的 module.json5,只需要把下面权限合并到 module.requestPermissions 中,避免覆盖 abilities、pages、deviceTypes 等原有内容:
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
},
{
"name": "ohos.permission.PRINT"
}
]
如果需要通过 harmony-configs 覆盖 entry 配置,可以在项目根目录创建 harmony-configs/entry/src/main/module.json5,内容参考:
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone",
"tablet",
"2in1"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:layered_image",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
],
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
},
{
"name": "ohos.permission.PRINT"
}
]
}
}
HarmonyOS 网页 / HTML 打印不需要额外复制页面,也不需要在 pages.json 中注册打印宿主页。
HarmonyOS 加密试用版手动补充 module.har
部分 HBuilderX 版本在普通 uni-app 的 HarmonyOS 工程中使用加密试用插件时,可能会出现插件市场已下载 module.har,但生成的 HarmonyOS 工程没有把它复制到 ohpm 依赖路径的问题。典型报错如下:
ohpm ERROR: Run install command failed
Error: 00617202 Fetch Local Package Failed
Error Message: Fetch local file package error, .../unpackage/dist/dev/app-harmony/uni_modules/hens-print/utssdk/app-harmony/module.har does not exist.
如果遇到该问题,可以向插件作者获取 module.har,并手动放到插件目录:
uni_modules/hens-print/utssdk/app-harmony/module.har
当 HBuilderX 已经创建 HarmonyOS 工程或停在 Install dependencies 步骤时,再把同一个文件复制到生成工程的 ohpm 本地依赖路径:
unpackage/dist/dev/app-harmony/uni_modules/hens-print/utssdk/app-harmony/module.har
本地命令示例:
mkdir -p unpackage/dist/dev/app-harmony/uni_modules/hens-print/utssdk/app-harmony
cp -X uni_modules/hens-print/utssdk/app-harmony/module.har \
unpackage/dist/dev/app-harmony/uni_modules/hens-print/utssdk/app-harmony/module.har
如果是发行构建,把路径中的 dist/dev 改为 dist/build。HBuilderX 清理或重新生成 app-harmony 工程后,这个文件可能会被删除,需要重新复制一次。该步骤只用于加密试用版的临时兼容;源码版或 HBuilderX 后续修复后不需要手动处理。
快速开始
uni-app X(UTS)
导入:
import {
print,
printWebPage,
printHtmlContent,
printMultipleImages,
isPrintableSync,
setDebugLog,
getDebugLogStatus
} from '@/uni_modules/hens-print'
import type { PrintOptions } from '@/uni_modules/hens-print'
选择文件并打印:
import { print, isPrintableSync } from '@/uni_modules/hens-print'
import type { PrintOptions } from '@/uni_modules/hens-print'
const selectAndPrint = () => {
uni.chooseFile({
count: 1,
extension: ['pdf', 'png', 'jpg', 'jpeg', 'bmp'],
success: (res) => {
const file = res.tempFiles[0]
if (!isPrintableSync(file.path)) {
uni.showToast({ title: '文件格式不支持', icon: 'none' })
return
}
const options: PrintOptions = {
filePath: file.path,
jobName: `打印任务 - ${file.name}`,
autoRotateLandscapeImage: true,
success: (result) => {
console.log('打印任务已提交', result)
uni.showToast({ title: '已提交打印', icon: 'success' })
},
fail: (err) => {
console.log('打印失败', err)
uni.showToast({ title: err.errMsg, icon: 'none' })
}
}
print(options)
}
})
}
网页打印:
import { printWebPage } from '@/uni_modules/hens-print'
printWebPage({
url: 'https://www.example.com',
jobName: '网页打印',
timeout: 30, // 单位:秒
renderDelay: 2000, // 单位:毫秒
// printReadySelector: '.chartRef-content', // 可选:等待指定节点出现且可见
// chartContainerSelector: '.chartRef-content', // Android 可选:指定图表容器
success: (res) => console.log('网页打印任务已提交', res),
fail: (err) => console.log('网页打印失败', err)
})
HTML 字符串打印:
import { printHtmlContent } from '@/uni_modules/hens-print'
printHtmlContent({
htmlContent: '<html><body><h1>Hello World</h1><p>HTML 打印</p></body></html>',
baseUrl: 'https://www.example.com',
jobName: 'HTML 打印',
success: (res) => console.log('HTML 打印任务已提交', res),
fail: (err) => console.log('HTML 打印失败', err)
})
多图片打印:
import { printMultipleImages } from '@/uni_modules/hens-print'
printMultipleImages({
imagePaths: ['/path/to/image1.jpg', '/path/to/image2.png'],
jobName: '多图片打印',
layoutMode: 'double', // single / double / quad;HarmonyOS 当前忽略
orientation: 'portrait', // portrait / landscape;HarmonyOS 当前忽略
imageMode: 'fit', // fit / fill;HarmonyOS 当前忽略
autoRotateLandscapeImage: true, // HarmonyOS 当前忽略
success: (res) => console.log('多图片打印任务已提交', res),
fail: (err) => console.log('多图片打印失败', err)
})
调试日志:
import { setDebugLog, getDebugLogStatus } from '@/uni_modules/hens-print'
setDebugLog({
enabled: true,
success: () => console.log('已开启打印调试日志')
})
const enabled = getDebugLogStatus()
console.log('打印调试日志状态', enabled)
uni-app(Vue / App 端)
导入:
import {
print,
printWebPage,
printHtmlContent,
printMultipleImages,
isPrintableSync,
setDebugLog,
getDebugLogStatus
} from '@/uni_modules/hens-print'
打印静态 PDF:
import { print } from '@/uni_modules/hens-print'
// #ifdef APP-PLUS
const filePath = plus.io.convertLocalFileSystemURL('_www/static/dummy.pdf')
print({
filePath,
jobName: '测试 PDF 打印',
success: (res) => console.log('打印任务已提交', res),
fail: (err) => console.log('打印失败', err)
})
// #endif
在线 PDF 下载后打印:
import { print } from '@/uni_modules/hens-print'
uni.downloadFile({
url: 'https://example.com/demo.pdf',
success: (res) => {
// #ifdef APP-PLUS
const localPath = plus.io.convertLocalFileSystemURL(res.tempFilePath)
print({ filePath: localPath, jobName: '在线 PDF 打印' })
// #endif
}
})
网页、HTML 和多图片打印的调用方式与 uni-app X 示例一致。
路径与文件说明
print/printMultipleImages需要传入 App 端可访问的本地文件路径。uni.chooseFile通常使用res.tempFiles[0].path。uni.chooseImage通常使用res.tempFilePaths。- App 静态资源可通过
plus.io.convertLocalFileSystemURL('_www/static/xxx.pdf')转换后传入。 - 在线 PDF 或图片需要先通过
uni.downloadFile下载到本地,再传入本地路径。 - uni-app App 环境建议对临时路径再执行
plus.io.convertLocalFileSystemURL(tempFilePath),避免虚拟路径导致找不到文件。 - Android 支持
content:///file:/// 本地路径,插件会尽量转换为可读取文件。 - HarmonyOS 会将以
/开头的本地路径转换为file://再调用系统打印服务。 isPrintableSync主要用于格式和路径初筛,不保证文件内容一定可被系统打印;最终结果以fail回调为准。
API 详细说明
print(options: PrintOptions)
打印本地 PDF 文档或单个图片文件。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| filePath | string | 是 | - | 本地文件路径 |
| jobName | string | 否 | Android: Document Print;HarmonyOS: Document Print;iOS 由系统处理 |
打印任务名称;HarmonyOS 文件打印可能由系统忽略 |
| autoRotateLandscapeImage | boolean | 否 | false | 横图自动旋转 90 度;Android / iOS 支持,HarmonyOS 当前忽略 |
| success | function | 否 | - | 任务创建、提交或打印面板流程成功回调 |
| fail | function | 否 | - | 失败回调 |
| complete | function | 否 | - | 完成回调,成功或失败都会调用 |
printWebPage(options: WebPrintOptions)
加载指定 URL 的网页并提交系统打印。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| url | string | 是 | - | 网页 URL,建议使用 HTTP / HTTPS |
| jobName | string | 否 | Web Page Print |
打印任务名称 |
| timeout | number | 否 | 30 | 网页加载超时时间,单位:秒 |
| renderDelay | number | 否 | 平台差异 | 页面加载后额外等待时间,单位:毫秒 |
| printReadySelector | string | 否 | - | Android / iOS 支持;等待指定 DOM 节点存在且可见后再打印 |
| chartContainerSelector | string | 否 | Android 自动识别 .lime-echart / canvas |
Android 支持;指定图表容器选择器 |
| success | function | 否 | - | 任务创建、提交或打印面板流程成功回调 |
| fail | function | 否 | - | 失败回调 |
| complete | function | 否 | - | 完成回调 |
renderDelay 默认策略:
- Android:不传或传
<= 0时使用智能延迟,页面完全加载约1000ms,未完全加载约3000ms。 - iOS:不传时默认
1000ms;传<= 0时约500ms。 - HarmonyOS:网页打印不传时默认
1000ms。
图表页建议:
- 对 ECharts、canvas 等异步渲染页面,建议显式传入
printReadySelector。 - Android 如需提升图表打印稳定性,可传入
chartContainerSelector精确锁定图表容器。 - iOS / HarmonyOS 当前不会使用
chartContainerSelector。
printHtmlContent(options: HtmlPrintOptions)
打印 HTML 内容字符串。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| htmlContent | string | 是 | - | HTML 内容字符串 |
| baseUrl | string | 否 | - | Android / iOS 用于解析相对路径资源;HarmonyOS 当前忽略 |
| jobName | string | 否 | HTML Content Print |
打印任务名称 |
| success | function | 否 | - | 任务创建、提交或打印面板流程成功回调 |
| fail | function | 否 | - | 失败回调 |
| complete | function | 否 | - | 完成回调 |
printMultipleImages(options: MultipleImagesPrintOptions)
打印多张图片。Android / iOS 支持排版参数;HarmonyOS 当前暂不应用布局参数。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| imagePaths | string[] | 是 | - | 图片文件路径数组;Android / iOS 最多 50 张 |
| jobName | string | 否 | Android: 多图片打印;iOS 由系统处理;HarmonyOS: Multiple Images Print |
打印任务名称;HarmonyOS 多文件打印可能由系统忽略 |
| layoutMode | 'single' \| 'double' \| 'quad' |
否 | single |
每页图片数量:1 / 2 / 4;HarmonyOS 当前忽略 |
| orientation | 'portrait' \| 'landscape' |
否 | portrait |
页面方向;HarmonyOS 当前忽略 |
| imageMode | 'fit' \| 'fill' |
否 | fit |
fit 完整显示,fill 居中裁剪;HarmonyOS 当前忽略 |
| autoRotateLandscapeImage | boolean | 否 | false | 横图自动旋转 90 度;Android / iOS 支持,HarmonyOS 当前忽略 |
| success | function | 否 | - | 任务创建、提交或打印面板流程成功回调 |
| fail | function | 否 | - | 失败回调 |
| complete | function | 否 | - | 完成回调 |
isPrintableSync(filePath: string): boolean
同步检查文件是否可被插件识别为支持格式。
const canPrint = isPrintableSync('/path/to/file.pdf')
平台差异:
- Android 会尝试解析路径并检查文件是否存在,再判断扩展名。
- iOS / HarmonyOS 主要根据扩展名判断。
- 返回
true不代表文件内容一定有效,损坏文件仍可能在打印时失败。
setDebugLog(options: DebugLogOptions)
启用或禁用调试日志。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| enabled | boolean | 是 | false | 是否启用调试日志 |
| success | function | 否 | - | 设置成功回调 |
| fail | function | 否 | - | 设置失败回调 |
| complete | function | 否 | - | 完成回调 |
getDebugLogStatus(): boolean
同步获取当前调试日志开关状态。
回调数据结构
PrintResult
| 字段 | 类型 | 说明 |
|---|---|---|
| success | boolean | 是否成功 |
| jobId | string | 打印任务标识;不同平台格式不同,可能为空 |
| message | string | 成功提示信息,可能为空 |
PrintFail
PrintFail 继承 IUniError,常用字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| errSubject | string | 固定为 hens-print |
| errCode | number | 插件错误码 |
| errMsg | string | 错误描述 |
错误码
| 错误码 | 说明 |
|---|---|
9080001 |
文件不存在或路径无效 |
9080002 |
文件格式不支持 |
9080003 |
打印机不可用或未连接 |
9080004 |
打印参数无效 |
9080005 |
打印任务执行失败 |
9080006 |
系统权限不足,无法访问打印服务 |
9080007 |
打印服务不可用 |
9080009 |
URL 格式无效 |
9080010 |
网页加载失败 |
9080011 |
网页加载超时 |
9080012 |
HTML 内容解析失败 |
9080013 |
用户取消打印 |
9080014 |
图片列表为空 |
9080015 |
部分图片文件无效 |
常见问题
success回调执行了,但打印机没有出纸:success只表示系统打印任务已创建、提交或打印面板流程成功,不保证物理打印完成,请继续检查系统打印队列和打印机状态。- 网页打印超时时间异常长:
timeout的单位是秒,不是毫秒;例如 30 秒应传timeout: 30。 - Android 选择 GIF / TIFF 后不可打印:Android 当前仅支持 PDF、PNG、JPG、JPEG、BMP;如需跨平台一致,建议业务侧限制选择这些格式。
- HarmonyOS 网页 / HTML 打印后仍显示“准备打印”:请确认已升级到当前版本;如仍复现请打开调试日志提供运行日志。
- HarmonyOS 加密试用版构建时报
module.har does not exist:确认uni_modules/hens-print/utssdk/app-harmony/module.har存在后,将该文件复制到unpackage/dist/dev/app-harmony/uni_modules/hens-print/utssdk/app-harmony/module.har,再重新执行 HarmonyOS 构建;发行构建使用dist/build路径。 - 网页或图表打印空白:适当增大
renderDelay;图表页建议传printReadySelector,Android 可额外传chartContainerSelector。 - 多图片失败:确认
imagePaths非空、路径可访问、图片格式受当前平台支持;Android / iOS 最多建议 50 张。 - 文件不存在:确认传入的是 App 可访问路径,静态资源或下载文件建议先转换成本地真实路径。
- uni-app X 试用 / 加密模式卡在“准备打印中”:调用
print时建议显式使用PrintOptions类型对象,例如const options: PrintOptions = {...}; print(options),避免匿名对象字面量参数推断异常。

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