求助:Confluence转Markdown及PDF生成的CI/CD流水线实现问题
解决Pandoc转换HTML表格转PDF被忽略的方案
1. 从根源解决:让docx转Markdown时生成原生Markdown表格
Pandoc默认处理复杂docx表格时可能生成HTML格式,直接调整转换命令强制输出原生Markdown表格:
pandoc -s input.docx -o output.md --to=gfm --extract-media=./media --markdown-table-style=pipe --wrap=none
--to=gfm:输出GitHub Flavored Markdown,对表格支持更友好--markdown-table-style=pipe:强制生成pipe格式的原生Markdown表格,避免HTML格式--wrap=none:防止表格内容自动换行导致格式混乱--extract-media:同步提取Confluence导出的Gliffy图片到指定目录,确保Markdown图片链接有效
2. 处理已生成的含HTML表格的Markdown
如果已经有带HTML表格的Markdown文件,先将HTML表格转成原生Markdown表格,再生成PDF:
# 第一步:转换HTML表格为原生Markdown表格 pandoc -s input.md -o cleaned.md --from=markdown+raw_html --to=gfm --html-table-to-markdown # 第二步:用清理后的Markdown生成PDF pandoc -s cleaned.md -o output.pdf --pdf-engine=xelatex --template=your-custom-template.tex
3. 检查自定义LaTeX模板的表格支持
确保你的LaTeX模板中包含表格处理所需的包,否则原生Markdown表格转PDF时也可能异常:
在模板中添加:
\usepackage{longtable} # 支持长表格分页 \usepackage{booktabs} # 美化表格边框 \usepackage{tabularx} # 自适应宽度表格
4. 复杂表格的脚本预处理方案
如果Confluence导出的docx包含合并单元格等复杂表格,Pandoc自动转换可能失效,用Python脚本手动提取并转换表格:
from docx import Document def table_to_markdown(table): markdown_rows = [] # 处理表头 header_cells = [cell.text.strip() for cell in table.rows[0].cells] markdown_rows.append(f"| {' | '.join(header_cells)} |") markdown_rows.append(f"| {' | '.join(['---']*len(header_cells))} |") # 处理内容行 for row in table.rows[1:]: row_cells = [cell.text.strip() for cell in row.cells] markdown_rows.append(f"| {' | '.join(row_cells)} |") return '\n'.join(markdown_rows) # 读取docx并转换 doc = Document("input.docx") final_content = "" for para in doc.paragraphs: if para.text.strip(): final_content += para.text.strip() + "\n\n" for table in doc.tables: final_content += table_to_markdown(table) + "\n\n" # 写入Markdown文件 with open("output.md", "w", encoding="utf-8") as f: f.write(final_content)
内容的提问来源于stack exchange,提问作者Steinar Kjærnsrød
相关产品推荐
相关产品推荐

