面向进阶用户的完整功能详解与最佳实践指南

系统要求
项目 | 要求 |
|---|---|
操作系统 | Android 8.0+ / iOS 12.0+ |
存储权限 | MANAGE_EXTERNAL_STORAGE |
最低存储空间 | 100MB |
内存 | 2GB RAM |
授权验证机制
本软件采用基于机器码的授权验证方案。每个设备首次运行时会根据硬件信息(设备名、系统架构、MAC地址)生成唯一机器码,并据此生成识别码。
激活流程
启动应用后,系统将自动请求存储权限并初始化授权服务
若检测到未激活状态,将弹出公众号关注弹窗
复制识别码后扫描弹窗内二维码,关注指定公众号
在公众号内发送识别码完成绑定
返回应用点击我已关注,验证激活完成验证
激活状态将持久化存储于本地 SharedPreferences,后续启动无需重复验证。
核心功能模块
模块一:多图片选择合并(Multi-Image Mode)
适用场景:将多张图片合并为单个PDF文档
操作路径:首页 → 多图片选择
功能特性:
特性 | 说明 |
|---|---|
批量选择 | 支持一次性选择多张图片 |
拖放排序 | 长按列表项可拖动调整顺序 |
实时预览 | 支持放大查看单张图片 |
数量统计 | 顶部状态栏显示已选图片数量与总大小 |
排序功能 | 按名称/大小/日期排序 |
全部清除 | 一键清空已选列表 |
工作流:
选择图片 → 调整顺序 → 配置选项 → 执行转换 → 输出PDF模块二:单独转换(Single-Image Mode)
适用场景:每张图片独立转换为PDF文件
操作路径:首页 → 单独转换

输出规则:
PDF文件名与原始图片文件名相同
输出路径遵循设置中的保存位置配置
高级设置
PDF页面配置
进入首页 → 设置按钮(齿轮图标) 可进入设置界面:
参数 | 可选值 | 默认值 | 说明 |
|---|---|---|---|
页面尺寸 | A3 / A4 / Letter / Legal | A4 | 标准纸张尺寸 |
页面方向 | 自动 / 横向 / 纵向 | 自动 | 根据图片比例自动判断 |
图片质量 | 0.1 ~ 1.0 | 0.9 | 值越高质量越好,文件越大 |
保持宽高比 | 是 / 否 | 是 | 关闭时图片将拉伸填满页面 |
保存位置配置
模式 | 说明 |
|---|---|
Downloads (推荐) | 公共下载文件夹,易于查找 |
原目录 | 输出到第一张图片所在目录 |
自定义目录 | 手动选择输出路径 |
图片压缩
开启后系统将使用指定的质量参数对图片进行压缩,适用于需要控制输出文件大小的场景。
技术细节
图片加载机制
软件使用 dart:io 的 File.readAsBytes() 直接读取图片字节,通过 pdf 包的 MemoryImage 提供者嵌入PDF页面。不依赖系统图片解码器,确保各种格式图片的兼容性。
PDF生成引擎
基于 pdf: ^3.10.7 包构建,采用以下策略:
页面尺寸由
_getPageFormat()根据用户配置动态计算图片以
BoxFit.contain模式居中显示(默认保持宽高比)若关闭宽高比保持,使用
BoxFit.fill填满页面
权限模型
权限 | 用途 | 请求时机 |
|---|---|---|
MANAGE_EXTERNAL_STORAGE | 读写外部存储文件 | 应用启动时 |
STORAGE | 兼容旧版本Android | 应用启动时 |
故障排查
问题 | 可能原因 | 解决方案 |
|---|---|---|
选择图片后崩溃 | Android 13+ 权限不足 | 确保已授权存储权限 |
转换无输出 | 图片格式不支持 | 检查文件扩展名 |
激活失败 | 网络问题 | 检查网络连接后重试 |
输出文件找不到 | 保存路径设置问题 | 检查设置中的保存位置 |
软件版本:v1.0.0
夜雨聆风