import markdown from playwright.sync_api import sync_playwright import os # 将 Markdown 字符串转换为 HTML def md_str_to_html(md_content, output_html): """ 将 Markdown 字符串转换为 HTML 文件,并添加支持中文和 Emoji 的样式。 :param md_content: 输入的 Markdown 字符串 :param output_html: 输出的 HTML 文件路径 """ # 转换 Markdown 为 HTML,启用额外功能(如表格、代码高亮) html_content = markdown.markdown(md_content, extensions=['extra', 'codehilite']) # 添加基本的 HTML 结构和样式,支持中文和 Emoji css = """ """ # 写入 HTML 文件 with open(output_html, 'w', encoding='utf-8') as f: f.write('
') f.write('') # 确保 UTF-8 编码 f.write(css) f.write('') f.write(html_content) f.write('') # 使用 Playwright 将 HTML 渲染并截图 def html_to_image(html_file, output_image): """ 使用 Playwright 加载 HTML 文件并截图。 :param html_file: 输入的 HTML 文件路径 :param output_image: 输出的图片文件路径 """ with sync_playwright() as p: # TODO 这里使用的比较呆的固定路径,后期优化 browser = p.chromium.launch(executable_path=r"C:\Users\Liu_WIN10\AppData\Local\Google\Chrome\Application\chrome.exe") page = browser.new_page() # 加载本地的 HTML 文件 page.goto(f'file://{os.path.abspath(html_file)}') # 设置 viewport(可选,根据需要调整) page.set_viewport_size({"width": 900, "height": 700}) # 截图 page.screenshot(path=output_image, full_page=True) browser.close() # 主函数:从字符串转换 Markdown 到图片 def convert_md_str_to_image(md_content, output_image): """ 将 Markdown 字符串转换为图片。 :param md_content: 输入的 Markdown 字符串 :param output_image: 输出的图片文件路径 """ # 中间生成的 HTML 文件 temp_html = 'temp_output.html' # 第一步:将 Markdown 字符串转换为 HTML md_str_to_html(md_content, temp_html) # 第二步:将 HTML 渲染为图片 html_to_image(temp_html, output_image) # 可选:删除临时的 HTML 文件 os.remove(temp_html) print(f"图片已生成:{output_image}") return os.path.abspath(output_image) # 示例使用 if __name__ == "__main__": # 示例 Markdown 字符串(包含中文和 Emoji) md_content = """ # 示例标题 这是一个示例 Markdown 字符串,包含中文和 Emoji 😊🚀。 ## 子标题 - 项目 1:学习 Python 🐍 - 项目 2:编写代码 💻 ### 代码示例 ```python print("你好,世界!🌍") """ spath = convert_md_str_to_image(md_content, "output.png") print(spath)