#!/usr/bin/env bash # 设计稿构建:把整页 HTML 按顶层 .page 拆成单页 → html2poster 逐页渲染 → 合并为同名 PDF # 用法:bash build.sh [stem ...] # stem 为 design-refs/mockup 下的 html 文件名(不含扩展名) # 默认构建 course-shelf 与 components 两个目标 set -euo pipefail cd "$(dirname "$0")" PDF_SKILL_DIR="${PDF_SKILL_DIR:-$HOME/.zcode/cli/plugins/cache/zcode-plugins-official/pdf/0.1.7/skills/pdf}" export PDF_SKILL_DIR # 本地渲染器(固定 headless-shell 规避系统 Chrome 占用;TMPDIR 重定向规避 /tmp 磁盘配额) HTML2POSTER="$PWD/tools/html2poster.js" H2P_CHROMIUM="${H2P_CHROMIUM:-$HOME/.cache/ms-playwright/chromium_headless_shell-1234/chrome-headless-shell-linux64/chrome-headless-shell}" export HTML2POSTER H2P_CHROMIUM mkdir -p "$HOME/.cache/h2p-tmp" export TMPDIR="$HOME/.cache/h2p-tmp" STEMS=("$@") if [ ${#STEMS[@]} -eq 0 ]; then STEMS=(course-shelf components color-system design-system) fi for STEM in "${STEMS[@]}"; do SRC="${STEM}.html" [ -f "$SRC" ] || { echo "!! 缺少 $SRC,跳过"; continue; } OUT_DIR="single-${STEM}" mkdir -p "$OUT_DIR" # 1. 按顶层 .page 拆单页(固定布局必须走 html2poster,不能用 html2pdf-next) python3 - "$SRC" "$OUT_DIR" <<'EOF' import re, sys src, out_dir = sys.argv[1], sys.argv[2] html = open(src, encoding="utf-8").read() head, rest = html.split("
", 1) body_inner = rest.rsplit("", 1)[0] pat = re.compile(r'(?=