docs(readme): add doc

This commit is contained in:
zhangheng
2026-07-14 15:20:54 +08:00
parent c6bedbcff8
commit 958f23a16a
6 changed files with 501 additions and 17 deletions

91
export-sso-pdf.sh Executable file
View File

@@ -0,0 +1,91 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
DEFAULT_INPUT="$SCRIPT_DIR/酷哇商城网页登录接入SSO方案文档.md"
usage() {
cat <<'EOF'
Usage:
./export-sso-pdf.sh [input.md] [output.pdf]
Examples:
./export-sso-pdf.sh
./export-sso-pdf.sh notes.md notes.pdf
The script renders Mermaid diagrams and prints the Markdown document as A4 PDF.
EOF
}
if [[ ${1:-} == "-h" || ${1:-} == "--help" ]]; then
usage
exit 0
fi
INPUT=${1:-$DEFAULT_INPUT}
OUTPUT=${2:-"${INPUT%.md}.pdf"}
if [[ ! -f "$INPUT" ]]; then
echo "Markdown file not found: $INPUT" >&2
exit 1
fi
if [[ ${INPUT##*.} != "md" ]]; then
echo "Input must be a .md file: $INPUT" >&2
exit 1
fi
if ! command -v node >/dev/null 2>&1; then
echo "Node.js is required. Install Node.js 18 or newer and retry." >&2
exit 1
fi
for candidate in google-chrome chromium chromium-browser; do
if command -v "$candidate" >/dev/null 2>&1; then
CHROME=$(command -v "$candidate")
break
fi
done
if [[ -z ${CHROME:-} ]]; then
echo "Chrome or Chromium is required to create PDF." >&2
exit 1
fi
INPUT_DIR=$(cd "$(dirname "$INPUT")" && pwd)
INPUT="$INPUT_DIR/$(basename "$INPUT")"
OUTPUT_DIR=$(cd "$(dirname "$OUTPUT")" && pwd)
OUTPUT="$OUTPUT_DIR/$(basename "$OUTPUT")"
WORK_DIR=$(mktemp -d "${TMPDIR:-/tmp}/markdown-pdf.XXXXXX")
cleanup() {
rm -rf "$WORK_DIR"
}
trap cleanup EXIT
render_mermaid() {
if command -v mmdc >/dev/null 2>&1; then
PUPPETEER_EXECUTABLE_PATH="$CHROME" mmdc "$@"
return
fi
PUPPETEER_EXECUTABLE_PATH="$CHROME" npm exec --yes \
--package=@mermaid-js/mermaid-cli -- mmdc "$@"
}
node "$SCRIPT_DIR/scripts/render-markdown-pdf.mjs" prepare "$INPUT" "$WORK_DIR"
shopt -s nullglob
for diagram in "$WORK_DIR"/diagram-*.mmd; do
render_mermaid -i "$diagram" -o "${diagram%.mmd}.svg"
done
shopt -u nullglob
HTML="$WORK_DIR/document.html"
node "$SCRIPT_DIR/scripts/render-markdown-pdf.mjs" render "$INPUT" "$WORK_DIR" "$HTML"
"$CHROME" --headless=new --no-sandbox --disable-gpu --no-pdf-header-footer \
--print-to-pdf="$OUTPUT" "file://$HTML" >/dev/null 2>&1
echo "PDF created: $OUTPUT"