# baike_reformat **Repository Path**: xkx1029/baike_reformat ## Basic Information - **Project Name**: baike_reformat - **Description**: 百度百科内容重排版工具 - 现代极简,使用 Flutter 开发,支持多套排版模板,导出长图/PDF - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-07 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 百科重排(baike_reformat) 一个跨平台(Windows + Android)的**百度百科内容重排版工具**,使用 Flutter (Dart) 开发。 它通过关键字搜索并获取百度百科词条内容,将原本排版简陋、包含大量无关信息的网页内容,按照多套现代极简的预设模板重新排版,并可一键导出为**长图**或 **PDF** 用于分享或阅读。 ## 功能特性 - **词条搜索与获取**:支持按关键字搜索百度百科词条,实时拉取网页内容(Dio 网络请求 + HTML 解析)。 - **多套排版模板**:内置 6 套 JSON 定义的排版模板,可一键切换,覆盖阅读、笔记、学术、卡片、杂志等场景: - `classic_reading` — 经典阅读(衬线排版、信息框右侧、首字下沉) - `minimalist_note` — 极简笔记 - `academic_simple` — 学术简约 - `card_waterfall` — 卡片瀑布流 - `magazine_two_col` — 杂志双栏 - `long_image_quick` — 长图快读 - **现代极简重排**:将正文段落、标题(H1/H2/H3)、图片、表格、信息框、参考文献等结构化内容按模板重新排版,支持自定义页边距、字号、行高、强调色、图文比例等布局参数。 - **导出长图 / PDF**:将重排后的内容渲染为长图(screenshot)或 PDF(pdf / printing),并支持一键分享(share_plus)。 - **验证码处理**:内置 WebView(flutter_inappwebview)验证码兜底方案,应对百度百科的访问限制。 - **搜索历史**:本地保存最近搜索记录(shared_preferences)。 - **主题适配**:支持亮色 / 暗色主题切换(Riverpod 状态管理)。 - **实时预览**:搜索、切换模板、调整布局参数时实时预览重排效果。 - **站内链接跳转 & 同名词条**:正文中的蓝色内链(如「统计学」「智能化」)可在应用内直接跳转并重排目标词条,支持查看同名消歧义词条。 - **词条内关键词搜索**:在词条内搜索并实时高亮所有匹配项(忽略大小写),显示命中数、一键清除。 - **收藏夹**:收藏常用词条、查看收藏夹并一键重新打开,本地持久化。 - **复制功能**:导出全文为纯文本 / Markdown,或按章节单独复制。 - **DOCX 导出**:支持将重排内容导出为 Word(DOCX)文档。 - **多端响应式布局**:桌面端三栏(索引 / 正文 / 图片注释)与可收起设置面板;手机端自动切换为单列布局,适配小屏阅读。 - **液态玻璃 UI**:全局 Liquid Glass 磨砂玻璃质感(顶栏 / 面板 / 弹窗 / 搜索框 / 悬浮按钮)。 - **稳定性增强**:瞬时网络错误自动重试、随时刷新当前词条、后台 WebView 抓取兜底。 - **Windows 安装包**:提供 Inno Setup 一键安装程序。 ## 技术栈 | 分类 | 技术 | | --- | --- | | 框架 | Flutter / Dart | | 状态管理 | flutter_riverpod, riverpod_annotation | | 路由 | go_router | | 网络请求 | dio | | HTML 解析 | html | | 验证码处理 | flutter_inappwebview | | 长图导出 | screenshot | | PDF 导出 | pdf, printing | | 文件与分享 | path_provider, share_plus | | 本地存储 | shared_preferences | | 图片加载 | cached_network_image | | 动效 | flutter_animate | ## 环境要求 - Flutter SDK:`^3.11.4`(Dart `^3.11.4`) - 支持平台:Windows、Android ## 安装与构建 ### 1. 获取依赖 ```bash flutter pub get ``` ### 2. 运行 ```bash # Windows 桌面端 flutter run -d windows # Android 设备 / 模拟器 flutter run -d android ``` ### 3. 构建发布包 ```bash # Windows flutter build windows # Android APK flutter build apk --release # Android App Bundle flutter build appbundle --release ``` ## 使用说明 1. 打开应用,在顶部搜索框输入百科词条关键字并搜索。 2. 应用实时获取并解析词条内容。 3. 使用底部 / 侧边的**模板切换器**在多套排版模板之间切换预览。 4. 可通过**布局参数面板**调整页边距、字号、行高、强调色、图文比例等参数。 5. 确认排版满意后,通过**导出面板**选择导出为**长图**或 **PDF**,并分享给他人。 6. 若遇到百度百科验证码拦截,应用会通过内置 WebView 引导完成验证后继续获取内容。 ## 安全说明(安装包 / 可执行文件报毒) 部分杀毒软件或 Windows SmartScreen 会对本项目的 **Windows 安装包 / 便携版 exe** 弹出「安全警告」或「报毒」提示。**这是误报,并非真的病毒**,原因如下: - 本项目为个人/开源项目,**未购买商业代码签名证书**,发布的可执行文件为「未签名」状态(`NotSigned`)。 - Windows SmartScreen 与杀毒软件对「未签名 + 新发布」的可执行文件会按启发式规则判定为可疑,从而给出告警——几乎所有个人/开源软件都会遇到。 - 你可以在 [VirusTotal](https://www.virustotal.com) 上传文件核对,绝大多数引擎不会报毒;如有个别引擎误报,多为同源启发式判定。 ### 如何安全使用 1. **便携版(推荐,免安装)**:下载 `百科重排_便携版_win_<版本>.zip`,解压后双击其中的 `baike_reformat.exe` 即可运行(需整个文件夹保持完整,含 DLL / data / WebView2 等)。 2. **信任/放行**:若仍收到提示,可在安全中心将应用文件夹加入「排除项」,或右键 → 属性 → 勾选「解除锁定」后再运行;SmartScreen 弹出时选择「更多信息 → 仍要运行」。 3. **安装包**:`百科重排_Setup_win_<版本>.exe` 为 Inno Setup 安装程序,包含同样未签名的 exe,故也可能被提示,信任方式同上。 > 生产环境若需彻底消除告警,需为可执行文件购买并配置 **Authenticode 代码签名证书**(OV/EV),用 `signtool` 签名后重新打包。本项目暂未配置。 ## 目录结构 ``` lib/ ├── core/ # 常量、异常、工具函数 ├── models/ # 数据模型(文章、图片、表格、目录、内容块、模板等) ├── providers/ # Riverpod 状态管理(搜索、模板、导出、主题、布局参数) ├── router/ # GoRouter 路由配置 ├── services/ # 业务服务(百科抓取、解析、验证码检测、排版渲染、导出、分享、模板加载) ├── ui/ │ ├── layout_blocks/ # 排版内容块组件(H2/H3/图片/信息框/段落/参考文献/表格) │ ├── screens/ # 页面(首页、验证码、关于) │ ├── theme/ # 主题(颜色、间距、排版、App 主题) │ └── widgets/ # 通用组件(搜索栏、模板切换、导出面板、预览等) ├── app.dart # 应用入口组件 └── main.dart # 程序入口 assets/ └── templates/ # 6 套内置排版模板(JSON) test/ # 单元测试 android/ # Android 平台工程 windows/ # Windows 平台工程 ``` ## 更新日志 ### 2026-08-09 - **移动端响应式重排**:手机窄屏下正文由三栏自动切换为单列布局,目录收缩为顶部横向章节标签,图片/注释追加到正文下方;设置面板改为右下角悬浮按钮 + 底部弹窗,AppBar 窄屏自动收纳为「更多」菜单([article_preview_widget.dart](lib/ui/widgets/article_preview_widget.dart)、[home_screen.dart](lib/ui/screens/home_screen.dart))。 - **全局液态玻璃(Liquid Glass)UI**:新增玻璃设计系统 [glass.dart](lib/ui/theme/glass.dart)(`Glass` / `GlassCard` / `GlassSheet` / 环境渐变背景),应用于顶栏、设置面板、搜索框、悬浮按钮与各类底部弹窗;主题改为半透明表面并统一玻璃配色([app_theme.dart](lib/ui/theme/app_theme.dart)、[app.dart](lib/app.dart))。 - **稳定性增强**:瞬时超时/网络错误自动重试(带退避)、任意错误态可重试、新增「刷新当前词条」按钮([search_provider.dart](lib/providers/search_provider.dart))。 - **侧栏图片性能优化**:改用 `CachedNetworkImage`(磁盘缓存 + 限制解码内存)+ `ListView.builder` 懒加载([article_preview_widget.dart](lib/ui/widgets/article_preview_widget.dart))。 - **Android 端修复**:为安卓端启用 WebView 兜底,解决「无法连接到网络」问题。 - **正式签名**:为 Android 配置正式签名并生成签名版 APK。 - **Windows 安装包**:新增 Inno Setup 打包脚本 [installer.iss](installer.iss),产出中文安装向导的 `.exe` 安装程序(排除 WebView2 运行时缓存以精简体积)。 ### 2026-08-07 - **新增「后台 WebView 加载与自动重排版」能力**:引入 [background_web_loader.dart](lib/services/background_web_loader.dart) 后台加载服务与 [background_web_loader_widget.dart](lib/ui/widgets/background_web_loader_widget.dart) 隐藏 WebView 组件,可在用户不可见的情况下于后台加载百度百科页面,并通过轮询检测正文是否渲染完成,就绪后自动抓取整页 HTML 进行重排版。 - **智能区分三类加载状态**:后台加载能自动区分「正文已就绪 / 仍在加载 / 真正需要人工验证」三种情况,避免误报验证码。 - **优化验证码兜底流程**:当 Dio 直连被百度风控拦截抛出 `CaptchaRequiredException` 时,不再直接弹出可见验证页面,而是先通过后台 WebView 自动加载正文并直接解析重排版(进入 `SearchSuccess`);仅当后台加载确需人工交互验证(返回 `null`)时才回退到可见的 `CaptchaScreen`。 - **相关改动**:在 [home_screen.dart](lib/ui/screens/home_screen.dart) 挂载后台 WebView 组件;在 [search_provider.dart](lib/providers/search_provider.dart) 新增 `backgroundWebLoaderProvider` 并接入自动加载逻辑。 ## 许可证 本项目基于 [MIT License](LICENSE) 开源,Copyright (c) 2026 XKX121029。 ## 致谢与说明 - 数据来源于百度百科,仅供学习与个人使用,请遵守相关平台的使用条款与法律法规。 - 感谢所有开源依赖库的开发者。