Skip to content

Repository files navigation

发给我妈看!!

Any2Screen

Any2Screen 是一个文档转换工具集,目标是把常见图文内容转换成更适合移动端阅读、传输和分享的输出格式。

Demo 网站访问地址:http://39.105.102.5:8082/

项目当前开发计划:.\DEVELOPMENT_PLAN.md)

当前仓库提供一个统一命令入口 any2screen,通过子命令调用主 pipeline 或独立阶段模块:

  • convert:运行完整 any2html -> html2screen pipeline
  • any2html:将输入文档转换为 HTML 中间产物
  • html2screen:将 HTML 转换为 A4 PDF、WeChat PDF、HTML 或图片
  • doc2md:将 DOCX/PDF/TXT 转换为 Markdown,作为独立工具保留

当前状态

当前代码更接近“转换能力原型”,不是完整应用。

  • 统一入口已经可用:scripts/any2screen.py
  • 子命令分发逻辑位于 src/
  • convert 作为主 CLI pipeline,内部执行 any2html -> html2screen
  • any2htmlhtml2screen 可独立调用,便于调试、复用和后续扩展
  • doc2md 作为独立转换工具保留,后续可作为 DOCX/PDF/TXT 接入 any2html 的基础

目录结构

Any2Screen/
├── README.md
├── DEVELOPMENT_PLAN.md
├── pyproject.toml
├── uv.lock
├── scripts/
│   └── any2screen.py
├── src/
│   ├── cli.py
│   ├── command_registry.py
│   ├── convert_cli.py
│   ├── any2html_cli.py
│   ├── html2screen_cli.py
│   ├── preview_cli.py
│   ├── web_cli.py
│   ├── doc2md.py
│   ├── pipeline.py
│   ├── preview.py
│   ├── any2html/
│   │   └── markdown.py
│   ├── html2screen/
│   │   └── renderers.py
│   └── web/
│       ├── app.py
│       ├── routes.py
│       └── schemas.py
├── docs/
│   ├── pipeline.md
│   └── runtime.requirements.txt

说明:

  • scripts/any2screen.py 是唯一统一入口
  • src/ 是统一入口实际调用的模块实现
  • src/any2html/ 负责把输入文档转换为 HTML 中间产物
  • src/html2screen/ 负责把 HTML 输出为 A4 PDF、WeChat PDF、长图等屏幕友好格式
  • src/pipeline.py 负责串接 any2html -> html2screen
  • 项目依赖由 uv 管理,声明在 pyproject.toml,锁定在 uv.lock

快速上手

项目需要 Python 3.10 及以上。

Windows

先在 PowerShell 中克隆仓库:

git clone https://github.com/Archjing/Any2Screen.git
cd Any2Screen

如果已经安装 uv

uv sync
uv run any2screen convert README.md --pdf

如果没有 uv,使用 pip

py -m pip install -e .
py scripts/any2screen.py convert README.md --pdf

macOS / Linux

先在终端中克隆仓库:

git clone https://github.com/Archjing/Any2Screen.git
cd Any2Screen

如果已经安装 uv

uv sync
uv run any2screen convert README.md --pdf

如果没有 uv,使用 pip

python3 -m pip install -e .
python3 scripts/any2screen.py convert README.md --pdf

默认会在输入文件同级目录生成输出文件。要导出长图,首次使用前还需要安装 Chromium。

使用 uv

uv run playwright install chromium

没有使用 uv 时:

python3 -m playwright install chromium

Windows:

py -m playwright install chromium

Docker 本地热挂载开发

如果你希望改完 src/scripts/ 后不用重新 build 镜像,可以使用本地覆盖配置:

docker compose \
  -f Any2Screen-server/docker-compose.yml \
  -f Any2Screen-server/docker-compose.local.yml \
  up -d --build

说明:

  • 首次仍然需要 --build,因为基础镜像里要安装 Python 依赖和 Playwright Chromium。
  • 之后修改 src/src/web/static/scripts/ 会通过宿主机 bind mount 进入容器。
  • any2screen-api 在本地覆盖配置里会使用 --reload 启动,代码变更后会自动重载。
  • 只有依赖变更或 Dockerfile 变更时,才需要再次 --build

统一命令行

总用法:

python3 scripts/any2screen.py <module> [module_args...]

当前支持的 <module>

  • convert
  • any2html
  • html2screen
  • preview
  • web
  • doc2md

查看帮助:

python3 scripts/any2screen.py --help
python3 scripts/any2screen.py convert --help
python3 scripts/any2screen.py any2html --help
python3 scripts/any2screen.py html2screen --help
python3 scripts/any2screen.py preview --help
python3 scripts/any2screen.py web --help
python3 scripts/any2screen.py doc2md --help

子命令说明

doc2md

将单个文件或目录中的文档转换为 Markdown。

支持格式:

  • .docx
  • .pdf
  • .txt

参数:

  • input:输入文件或目录
  • -o, --output:输出目录,默认当前目录
  • -p, --password:加密 .docx 的密码,可选

示例:

python3 scripts/any2screen.py doc2md ./report.docx
python3 scripts/any2screen.py doc2md ./report.pdf -o ./out
python3 scripts/any2screen.py doc2md ./docs -o ./out -p your_password

convert

运行完整 pipeline,将一个或多个输入文档转换为 HTML、PDF、微信阅读 PDF 或长图。

参数:

  • paths:一个或多个 .md 文件或目录
  • -o, --output:输出目录,默认与源文件同级
  • --html:生成 HTML;默认无 PDF 参数时启用
  • --pdf:生成 A4 PDF;默认只输出 PDF
  • --wechat:生成适合微信阅读的 PDF;默认只输出 PDF
  • --img:生成长图;默认只输出图片
  • --width:图片视口宽度,默认 960
  • --format:图片格式,支持 pngjpeg,默认 png
  • -v, --verbose:详细输出

示例:

python3 scripts/any2screen.py convert ./README.md
python3 scripts/any2screen.py convert ./notes -o ./exports
python3 scripts/any2screen.py convert ./trip.md --pdf
python3 scripts/any2screen.py convert ./trip.md --html --pdf
python3 scripts/any2screen.py convert ./trip.md --img --width 1080 --format png
python3 scripts/any2screen.py convert ./trip.md --img --format jpeg -o ./exports
python3 scripts/any2screen.py convert ./trip.md --html --pdf --wechat --img
python3 scripts/any2screen.py convert ~/workspace/stok-mapping/tasks/cross-market/HK_A_SHARE_MAPPING_STRATEGIES.md --pdf

依赖:

  • 运行依赖见 pyproject.toml
  • watchdog 是可选依赖,使用 --watch 时安装 uv sync --extra watch

补充:

  • 该模块当前是仓库里最成熟的 CLI
  • 指定任一输出 flag 时只输出指定格式;需要多格式时组合使用,比如 --html --pdf --img

图片输出依赖:

  • 运行依赖见 pyproject.toml
  • 首次使用 --img 前需要安装 Playwright 浏览器:uv run playwright install chromium

any2html

只执行预处理阶段,将输入文档转换为 HTML 中间产物。

python3 scripts/any2screen.py any2html ./README.md
python3 scripts/any2screen.py any2html ./README.md -o ./exports
python3 scripts/any2screen.py any2html ./README.md -o ./exports/readme.html

html2screen

只执行输出渲染阶段,将 HTML 中间产物转换为屏幕友好格式。

python3 scripts/any2screen.py html2screen ./README.html --pdf
python3 scripts/any2screen.py html2screen ./README.html --wechat
python3 scripts/any2screen.py html2screen ./README.html --img --width 960 --format png
python3 scripts/any2screen.py html2screen ./README.html --html --pdf --wechat --img -o ./exports

preview

生成轻量 HTML 预览,只处理 Markdown 的前若干个内容块,适合后续 Web 首屏预览。

参数:

  • paths:一个或多个 .md 文件或目录
  • -o, --output:输出 HTML 文件或目录,默认与源文件同级
  • --blocks:最多保留的 Markdown 块数,默认 20
  • --table-rows:每个表格最多保留的数据行数,默认 20
  • --code-lines:每个代码块最多保留的行数,默认 120

示例:

python3 scripts/any2screen.py preview ./README.md
python3 scripts/any2screen.py preview ./README.md --blocks 12
python3 scripts/any2screen.py preview ./notes -o ./previews

web

启动 API-first 的 FastAPI 开发服务。

先安装 Web 额外依赖:

uv sync --extra web

没有使用 uv 时:

python3 -m pip install -e ".[web]"

启动服务:

python3 scripts/any2screen.py web

默认地址:

  • API 根路径:http://127.0.0.1:8000/api
  • Web 页面:http://127.0.0.1:8000/
  • 健康检查:http://127.0.0.1:8000/api/health
  • 文件上传:POST http://127.0.0.1:8000/api/files
  • Markdown/TXT/DOCX/PDF 预览:GET http://127.0.0.1:8000/api/previews/{file_id}
  • HTML 导出:GET http://127.0.0.1:8000/api/exports/{file_id}/html
  • PDF 导出:GET http://127.0.0.1:8000/api/exports/{file_id}/pdf
  • OpenAPI:http://127.0.0.1:8000/openapi.json
  • Swagger UI:http://127.0.0.1:8000/docs

上传接口示例:

curl -F file=@README.md http://127.0.0.1:8000/api/files

预览接口示例:

curl http://127.0.0.1:8000/api/previews/{file_id}

导出接口示例:

curl -OJ http://127.0.0.1:8000/api/exports/{file_id}/html
curl -OJ http://127.0.0.1:8000/api/exports/{file_id}/pdf

扩展子命令

统一入口本身不写任何具体转换逻辑,只负责路由。

新增子命令时:

  1. src/ 添加模块脚本
  2. src/command_registry.py 注册子命令与脚本路径
  3. 通过 python3 scripts/any2screen.py <new_module> ... 调用

测试

python3 -m unittest discover -s tests

相关文档

  • pipeline 补充说明:docs/pipeline.md
  • 中间文档结构设计:docs/intermediate-document.md
  • 运行依赖清单:docs/runtime.requirements.txt
  • 开发规划:DEVELOPMENT_PLAN.md

📋 License

This project is licensed under CC BY-NC-SA 4.0.

You are free to:

1. Share — copy and redistribute the material in any medium or format.

2. Adapt — remix, transform, and build upon the material.

The licensor cannot revoke these freedoms as long as you **follow the license terms**.

本项目采用 CC BY-NC-SA 4.0 许可证。

你可以自由:

分享 — 以任何媒介或格式复制、再分发本素材

改编 — 对本素材进行混编、转换、二次创作

只要你遵守许可证条款,许可人就不能撤销这些自由

License: CC BY-NC-SA 4.0

About

Any2Screen 是一个文档转换工具集,目标是把常见图文内容转换成更适合移动端阅读、传输和分享的输出格式。项目还在开发中,计划加入微信、飞书协作生态,加入“阅后即焚”模式(见开发计划书DEVELOPMENT_PLAN文件)。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages