fujian_water_biz_doc/scripts/quick_unified_export.sh

600 lines
14 KiB
Bash
Executable File
Raw 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
# 福建水务营收系统 - 快速统一文档导出工具
# 解决多文件图表混乱和标题样式问题的简化版本
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 '<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">')
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 '<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script><script>mermaid.initialize({startOnLoad:true});</script>')
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