()
| 250 | |
| 251 | |
| 252 | def main(): |
| 253 | parser = argparse.ArgumentParser(description="横纵分析法报告 Markdown → PDF") |
| 254 | parser.add_argument("input", help="输入的 Markdown 文件路径") |
| 255 | parser.add_argument("output", help="输出的 PDF 文件路径") |
| 256 | parser.add_argument("--title", default=None, help="报告标题") |
| 257 | parser.add_argument("--author", default="数字生命卡兹克", help="作者名") |
| 258 | args = parser.parse_args() |
| 259 | |
| 260 | with open(args.input, "r", encoding="utf-8") as f: |
| 261 | md_text = f.read() |
| 262 | |
| 263 | # 提取元信息 |
| 264 | meta_line = "" |
| 265 | for line in md_text.split("\n"): |
| 266 | stripped = line.strip().lstrip(">").strip() |
| 267 | if "研究时间" in stripped or "所属领域" in stripped or "研究对象类型" in stripped: |
| 268 | meta_line = stripped |
| 269 | break |
| 270 | |
| 271 | html = md_to_html(md_text, title=args.title or "横纵分析报告", meta_line=meta_line, author=args.author) |
| 272 | |
| 273 | # 保存中间 HTML(便于调试) |
| 274 | html_path = args.output.replace('.pdf', '.html') |
| 275 | with open(html_path, 'w', encoding='utf-8') as f: |
| 276 | f.write(html) |
| 277 | print(f"[OK] HTML 已生成: {html_path}") |
| 278 | |
| 279 | # 转 PDF |
| 280 | from weasyprint import HTML |
| 281 | HTML(string=html).write_pdf(args.output) |
| 282 | size_kb = os.path.getsize(args.output) / 1024 |
| 283 | print(f"[OK] PDF 已生成: {args.output} ({size_kb:.1f} KB)") |
| 284 | |
| 285 | |
| 286 | if __name__ == "__main__": |
no test coverage detected