#!/bin/zsh
# 福建水务营收系统 - 快速统一文档导出工具
# 解决多文件图表混乱和标题样式问题的简化版本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查依赖
check_dependencies() {
log_info "检查依赖工具..."
if ! command -v pandoc &> /dev/null; then
log_error "pandoc 未安装,请运行 'brew install pandoc' 安装"
exit 1
fi
log_success "pandoc 已安装"
}
# 合并所有文档(不处理图表)
merge_all_documents_simple() {
local merged_file="$1"
log_info "开始合并所有文档..."
# 创建文档头部
cat > "$merged_file" << 'EOF'
---
title: "福建水务营收系统概要设计文档"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
# 福建水务营收系统概要设计文档
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 概要设计文档 |
| **文档版本** | v1.0 |
| **编写日期** | 2024-12-19 |
| **文档状态** | ✅ 已完成 |
---
EOF
# 定义文档合并顺序和标题
declare -A doc_titles
doc_titles["water_biz_system_architecture.md"]="系统架构设计"
doc_titles["water_biz_module_design.md"]="模块功能设计"
doc_titles["water_biz_database_design.md"]="数据库设计"
doc_titles["water_biz_interface_design.md"]="接口设计"
doc_titles["water_biz_deployment_design.md"]="部署设计"
doc_titles["water_biz_security_design.md"]="安全设计"
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"
)
local doc_count=0
for doc in "${doc_order[@]}"; do
if [[ -f "$doc" ]]; then
doc_count=$((doc_count + 1))
log_info "合并文档 [$doc_count/6]: $doc"
# 添加分页符和章节标题
echo "" >> "$merged_file"
echo "\\newpage" >> "$merged_file"
echo "" >> "$merged_file"
echo "# 第${doc_count}部分:${doc_titles[$doc]}" >> "$merged_file"
echo "" >> "$merged_file"
# 处理文档内容,调整标题层级,保留Mermaid图表原样
sed -E 's/^# /## /g; s/^## /### /g; s/^### /#### /g; s/^#### /##### /g' "$doc" >> "$merged_file"
echo "" >> "$merged_file"
echo "---" >> "$merged_file"
echo "" >> "$merged_file"
else
log_warning "文档不存在: $doc"
fi
done
log_success "文档合并完成,共合并了 $doc_count 个文档"
}
# 创建增强的CSS样式
create_enhanced_css() {
local css_file="$1"
cat > "$css_file" << 'CSS_EOF'
/* 福建水务营收系统文档样式 */
@page {
margin: 2cm;
size: A4;
}
body {
font-family: "PingFang SC", "Microsoft YaHei", "SimSun", sans-serif;
font-size: 11pt;
line-height: 1.6;
color: #333;
max-width: none;
margin: 0;
padding: 0;
}
/* 标题样式 - 修复三级标题问题 */
h1 {
font-size: 18pt;
font-weight: bold;
color: #1f4e79;
margin-top: 24pt;
margin-bottom: 12pt;
border-bottom: 2pt solid #1f4e79;
padding-bottom: 6pt;
page-break-after: avoid;
}
h2 {
font-size: 16pt;
font-weight: bold;
color: #2f5597;
margin-top: 18pt;
margin-bottom: 10pt;
border-bottom: 1pt solid #2f5597;
padding-bottom: 4pt;
page-break-after: avoid;
}
h3 {
font-size: 14pt;
font-weight: bold;
color: #365f91;
margin-top: 14pt;
margin-bottom: 8pt;
background-color: #f8f9fa;
padding: 6pt 12pt;
border-left: 4pt solid #365f91;
page-break-after: avoid;
}
h4 {
font-size: 12pt;
font-weight: bold;
color: #4472c4;
margin-top: 12pt;
margin-bottom: 6pt;
padding-left: 8pt;
border-left: 2pt solid #4472c4;
page-break-after: avoid;
}
h5 {
font-size: 11pt;
font-weight: bold;
color: #5b9bd5;
margin-top: 10pt;
margin-bottom: 5pt;
page-break-after: avoid;
}
h6 {
font-size: 10pt;
font-weight: bold;
color: #70ad47;
margin-top: 8pt;
margin-bottom: 4pt;
page-break-after: avoid;
}
/* 段落样式 */
p {
margin-top: 0;
margin-bottom: 8pt;
text-align: justify;
text-justify: inter-ideograph;
}
/* 表格样式 */
table {
border-collapse: collapse;
width: 100%;
margin: 12pt 0;
font-size: 10pt;
page-break-inside: avoid;
}
th {
background-color: #4472c4;
color: white;
font-weight: bold;
padding: 8pt;
border: 1pt solid #2f5597;
text-align: center;
}
td {
padding: 6pt 8pt;
border: 1pt solid #a6a6a6;
vertical-align: top;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
/* 代码样式 */
code {
font-family: "Courier New", "Monaco", monospace;
font-size: 9pt;
background-color: #f5f5f5;
padding: 2pt 4pt;
border-radius: 2pt;
border: 1pt solid #e1e1e1;
}
pre {
font-family: "Courier New", "Monaco", monospace;
font-size: 9pt;
background-color: #f8f8f8;
padding: 12pt;
border: 1pt solid #e1e1e1;
border-radius: 4pt;
overflow-x: auto;
margin: 12pt 0;
page-break-inside: avoid;
}
pre code {
background: none;
padding: 0;
border: none;
}
/* Mermaid 样式 */
.mermaid {
text-align: center;
margin: 12pt 0;
border: 1pt solid #e1e1e1;
border-radius: 4pt;
padding: 12pt;
background-color: #fafafa;
}
/* 列表样式 */
ul, ol {
margin: 8pt 0;
padding-left: 24pt;
}
li {
margin: 4pt 0;
}
/* 链接样式 */
a {
color: #0563c1;
text-decoration: underline;
}
a:visited {
color: #954f72;
}
/* 引用样式 */
blockquote {
margin: 12pt 0;
padding: 12pt;
background-color: #f9f9f9;
border-left: 4pt solid #4472c4;
font-style: italic;
}
/* 水平分隔线 */
hr {
border: none;
border-top: 1pt solid #d1d1d1;
margin: 18pt 0;
}
/* 强调样式 */
strong, b {
font-weight: bold;
color: #1f4e79;
}
em, i {
font-style: italic;
color: #365f91;
}
/* 印刷样式优化 */
@media print {
body {
font-size: 10pt;
line-height: 1.4;
}
h1 { font-size: 16pt; }
h2 { font-size: 14pt; }
h3 { font-size: 12pt; }
h4 { font-size: 11pt; }
h5 { font-size: 10pt; }
h6 { font-size: 9pt; }
table { font-size: 9pt; }
code, pre { font-size: 8pt; }
/* 避免在不适当的地方分页 */
h1, h2, h3, h4, h5, h6 {
page-break-after: avoid;
}
table, pre, .mermaid {
page-break-inside: avoid;
}
}
CSS_EOF
log_success "CSS样式文件创建完成"
}
# 导出Word文档
export_to_docx() {
local input_file="$1"
local output_file="$2"
local css_file="$3"
log_info "导出Word文档..."
# 创建输出目录
mkdir -p "$(dirname "$output_file")"
# 使用pandoc转换
pandoc "$input_file" \
-o "$output_file" \
--from markdown+smart \
--to docx \
--standalone \
--toc \
--toc-depth=4 \
--number-sections \
--highlight-style=tango \
--reference-doc=templates/reference.docx \
--metadata title="福建水务营收系统概要设计文档" \
--metadata author="系统设计团队" \
--metadata date="2024年12月19日" \
2>/dev/null || \
pandoc "$input_file" \
-o "$output_file" \
--from markdown+smart \
--to docx \
--standalone \
--toc \
--toc-depth=4 \
--number-sections \
--metadata title="福建水务营收系统概要设计文档" \
--metadata author="系统设计团队" \
--metadata date="2024年12月19日"
if [ $? -eq 0 ]; then
log_success "Word文档导出成功: $output_file"
else
log_error "Word文档导出失败"
return 1
fi
}
# 导出PDF文档
export_to_pdf() {
local input_file="$1"
local output_file="$2"
local css_file="$3"
log_info "导出PDF文档..."
# 创建输出目录
mkdir -p "$(dirname "$output_file")"
# 先转换为HTML,再转换为PDF
local html_temp="${output_file%.pdf}_temp.html"
# 使用pandoc转换为HTML
pandoc "$input_file" \
-o "$html_temp" \
--from markdown+smart \
--to html5 \
--css="$css_file" \
--standalone \
--toc \
--toc-depth=4 \
--number-sections \
--highlight-style=tango \
--metadata title="福建水务营收系统概要设计文档" \
--metadata author="系统设计团队" \
--metadata date="2024年12月19日" \
--include-in-header=<(echo '')
if [ $? -eq 0 ]; then
log_success "HTML临时文件创建成功"
# 尝试使用wkhtmltopdf转换为PDF
if command -v wkhtmltopdf &> /dev/null; then
wkhtmltopdf --page-size A4 \
--margin-top 2cm \
--margin-bottom 2cm \
--margin-left 2cm \
--margin-right 2cm \
--encoding UTF-8 \
--disable-smart-shrinking \
"$html_temp" "$output_file" 2>/dev/null
if [ $? -eq 0 ]; then
log_success "PDF文档导出成功: $output_file"
rm -f "$html_temp"
else
log_warning "PDF导出失败,HTML文件保留: $html_temp"
fi
else
log_warning "wkhtmltopdf 未安装,保留HTML文件: $html_temp"
fi
else
log_error "PDF文档导出失败"
return 1
fi
}
# 导出HTML文档
export_to_html() {
local input_file="$1"
local output_file="$2"
local css_file="$3"
log_info "导出HTML文档..."
# 创建输出目录
mkdir -p "$(dirname "$output_file")"
# 使用pandoc转换为HTML
pandoc "$input_file" \
-o "$output_file" \
--from markdown+smart \
--to html5 \
--css="$css_file" \
--standalone \
--toc \
--toc-depth=4 \
--number-sections \
--highlight-style=tango \
--metadata title="福建水务营收系统概要设计文档" \
--metadata author="系统设计团队" \
--metadata date="2024年12月19日" \
--include-in-header=<(echo '')
if [ $? -eq 0 ]; then
log_success "HTML文档导出成功: $output_file"
else
log_error "HTML文档导出失败"
return 1
fi
}
# 主函数
main() {
local export_format="${1:-all}"
echo "🚀 福建水务营收系统 - 快速统一文档导出工具"
echo "============================================="
echo ""
# 检查依赖
check_dependencies
# 创建输出目录
mkdir -p output
# 定义文件路径
local merged_md="output/merged_documents_quick.md"
local css_file="output/document_style.css"
# 步骤1:合并所有文档(保留原始Mermaid图表)
log_info "步骤1:合并所有文档(保留Mermaid图表原样)"
merge_all_documents_simple "$merged_md"
# 步骤2:创建CSS样式
log_info "步骤2:创建增强CSS样式"
create_enhanced_css "$css_file"
# 步骤3:导出不同格式
log_info "步骤3:导出文档"
if [[ "$export_format" == "all" || "$export_format" == "docx" ]]; then
log_info "导出Word格式..."
export_to_docx "$merged_md" "output/福建水务营收系统概要设计文档_完整版.docx" "$css_file"
fi
if [[ "$export_format" == "all" || "$export_format" == "pdf" ]]; then
log_info "导出PDF格式..."
export_to_pdf "$merged_md" "output/福建水务营收系统概要设计文档_完整版.pdf" "$css_file"
fi
if [[ "$export_format" == "all" || "$export_format" == "html" ]]; then
log_info "导出HTML格式..."
export_to_html "$merged_md" "output/福建水务营收系统概要设计文档_完整版.html" "$css_file"
fi
echo ""
echo "🎉 文档导出完成!"
echo ""
echo "📁 输出文件:"
if [[ "$export_format" == "all" || "$export_format" == "docx" ]]; then
echo " 📄 Word文档: output/福建水务营收系统概要设计文档_完整版.docx"
fi
if [[ "$export_format" == "all" || "$export_format" == "pdf" ]]; then
echo " 📄 PDF文档: output/福建水务营收系统概要设计文档_完整版.pdf"
fi
if [[ "$export_format" == "all" || "$export_format" == "html" ]]; then
echo " 📄 HTML文档: output/福建水务营收系统概要设计文档_完整版.html"
fi
echo ""
echo "💡 提示:"
echo " - Mermaid图表在HTML中会自动渲染"
echo " - 三级标题样式已修复(带背景色和边框)"
echo " - 文档结构清晰,适合打印和分发"
echo " - Word和PDF中保留原始Mermaid代码"
echo ""
}
# 显示使用说明
show_usage() {
echo "用法: $0 [格式]"
echo ""
echo "格式选项:"
echo " all 导出所有格式 (默认)"
echo " docx 仅导出Word格式"
echo " pdf 仅导出PDF格式"
echo " html 仅导出HTML格式"
echo ""
echo "示例:"
echo " $0 # 导出所有格式"
echo " $0 docx # 仅导出Word"
echo " $0 pdf # 仅导出PDF"
echo " $0 html # 仅导出HTML"
}
# 处理命令行参数
case "${1:-}" in
-h|--help|help)
show_usage
exit 0
;;
all|docx|pdf|html|"")
main "${1:-all}"
;;
*)
echo "错误: 不支持的格式 '$1'"
echo ""
show_usage
exit 1
;;
esac