fujian_water_biz_doc/scripts/process-mermaid.sh

222 lines
7.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/zsh
# Mermaid图表处理脚本
# 将Markdown文档中的Mermaid图表转换为图片以便在Word文档中正确显示
echo "🔄 开始处理Mermaid图表..."
# 确保必要的工具已安装
check_dependencies() {
echo "📋 检查依赖工具..."
if ! command -v node &> /dev/null; then
echo "❌ 错误: 需要安装Node.js"
echo "请访问 https://nodejs.org/ 下载安装"
exit 1
fi
# 检查mermaid-cli
if ! npx mmdc --version &> /dev/null && ! command -v mmdc &> /dev/null; then
echo "📦 安装mermaid-cli..."
npm install @mermaid-js/mermaid-cli --save-dev
if [ $? -eq 0 ]; then
echo "✅ mermaid-cli安装成功"
else
echo "❌ mermaid-cli安装失败"
exit 1
fi
else
echo "✅ mermaid-cli已安装"
fi
if ! command -v pandoc &> /dev/null; then
echo "❌ 错误: 需要安装pandoc"
echo "macOS: brew install pandoc"
echo "其他系统: https://pandoc.org/installing.html"
exit 1
else
echo "✅ pandoc已安装"
fi
}
# 处理单个Markdown文件中的Mermaid图表
process_mermaid_file() {
local input_file="$1"
local output_file="$2"
local temp_dir="temp_mermaid_$$"
echo "📄 处理文件: $input_file"
# 创建临时目录
mkdir -p "$temp_dir"
# 复制原文件
cp "$input_file" "$temp_dir/temp.md"
# 提取并转换Mermaid图表
local mermaid_count=0
local in_mermaid=false
local mermaid_content=""
local processed_content=""
while IFS= read -r line; do
if [[ "$line" =~ ^\`\`\`mermaid ]]; then
in_mermaid=true
mermaid_content=""
continue
elif [[ "$line" =~ ^\`\`\`$ ]] && [ "$in_mermaid" = true ]; then
# 处理Mermaid图表
mermaid_count=$((mermaid_count + 1))
local mermaid_file="$temp_dir/diagram_$mermaid_count.mmd"
local image_file="$temp_dir/diagram_$mermaid_count.png"
# 保存Mermaid代码到文件
echo "$mermaid_content" > "$mermaid_file"
# 转换为PNG图片
echo "🖼️ 转换图表 $mermaid_count..."
npx mmdc -i "$mermaid_file" -o "$image_file" -w 1200 -H 800 --backgroundColor white 2>/dev/null || {
mmdc -i "$mermaid_file" -o "$image_file" -w 1200 -H 800 --backgroundColor white 2>/dev/null || {
echo "⚠️ 警告: 图表 $mermaid_count 转换失败,将保留原始代码"
processed_content+="$(echo $'\n```mermaid\n'"$mermaid_content"$'\n```\n')"
in_mermaid=false
continue
}
}
if [ -f "$image_file" ]; then
# 替换为图片引用
processed_content+="$(echo $'\n![流程图 '$mermaid_count']('$image_file')\n')"
echo "✅ 图表 $mermaid_count 转换成功"
else
# 如果转换失败,保留原始代码
processed_content+="$(echo $'\n```mermaid\n'"$mermaid_content"$'\n```\n')"
echo "⚠️ 图表 $mermaid_count 转换失败,保留原始代码"
fi
in_mermaid=false
elif [ "$in_mermaid" = true ]; then
mermaid_content+="$line"$'\n'
else
processed_content+="$line"$'\n'
fi
done < "$input_file"
# 保存处理后的内容
echo "$processed_content" > "$output_file"
echo "📊 共处理 $mermaid_count 个图表"
# 清理临时文件
# rm -rf "$temp_dir"
}
# 处理所有Markdown文件
process_all_files() {
local output_dir="processed_docs"
mkdir -p "$output_dir"
echo "🔄 处理所有设计文档..."
local doc_files=(
"water_biz_system_architecture.md"
"water_biz_module_design.md"
"water_biz_database_design.md"
"water_biz_interface_design.md"
"water_biz_deployment_design.md"
"water_biz_security_design.md"
)
for doc in "${doc_files[@]}"; do
if [ -f "$doc" ]; then
echo "📄 处理: $doc"
process_mermaid_file "$doc" "$output_dir/$doc"
else
echo "⚠️ 文件不存在: $doc"
fi
done
echo "✅ 所有文件处理完成,输出目录: $output_dir"
}
# 生成带图片的Word文档
export_to_docx_with_images() {
local processed_dir="processed_docs"
local output_dir="output"
mkdir -p "$output_dir"
echo "📝 导出Word文档..."
# 合并处理后的文档
local merged_file="$output_dir/merged_processed_docs.md"
echo "---" > "$merged_file"
echo "title: \"福建水务营收系统概要设计文档\"" >> "$merged_file"
echo "author: \"系统设计团队\"" >> "$merged_file"
echo "date: \"$(date '+%Y年%m月%d日')\"" >> "$merged_file"
echo "---" >> "$merged_file"
echo "" >> "$merged_file"
# 按顺序合并文档
local doc_order=(
"water_biz_system_architecture.md"
"water_biz_module_design.md"
"water_biz_database_design.md"
"water_biz_interface_design.md"
"water_biz_deployment_design.md"
"water_biz_security_design.md"
)
for doc in "${doc_order[@]}"; do
if [ -f "$processed_dir/$doc" ]; then
echo "" >> "$merged_file"
echo "---" >> "$merged_file"
echo "" >> "$merged_file"
cat "$processed_dir/$doc" >> "$merged_file"
fi
done
# 使用pandoc转换为Word
local output_docx="$output_dir/福建水务营收系统概要设计文档_含图表.docx"
echo "🔄 使用pandoc转换为Word格式..."
pandoc "$merged_file" -o "$output_docx" \
--reference-doc=templates/reference.docx \
--extract-media="$output_dir/media" \
2>/dev/null || \
pandoc "$merged_file" -o "$output_docx" \
--extract-media="$output_dir/media"
if [ -f "$output_docx" ]; then
echo "✅ Word文档导出成功: $output_docx"
echo "📂 媒体文件目录: $output_dir/media"
else
echo "❌ Word文档导出失败"
exit 1
fi
}
# 主函数
main() {
echo "🚀 福建水务营收系统 - Mermaid图表处理工具"
echo "================================="
check_dependencies
process_all_files
export_to_docx_with_images
echo ""
echo "🎉 处理完成!"
echo "📄 包含图表的Word文档: output/福建水务营收系统概要设计文档_含图表.docx"
echo "📁 处理后的Markdown文件: processed_docs/"
echo ""
echo "💡 提示:"
echo " - 如果某些图表未正确显示请检查Mermaid语法"
echo " - 图片文件保存在 output/media/ 目录中"
echo " - 可以手动调整图片大小和位置"
}
# 如果直接运行此脚本
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi