docs(readme): add doc
This commit is contained in:
91
export-sso-pdf.sh
Executable file
91
export-sso-pdf.sh
Executable 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"
|
||||
Reference in New Issue
Block a user