python --html转word

试了pdf2docx pdf转word 样式保留太差

试了liboffice pdf转word 样式保留太差

只有微软的office接口 和 浏览器渲染复制的情况 样式目前还行 能接受

python 复制代码
# 必须有微软的office 否则不可执行
def html_to_word_copy_paste(html_path):
    """
    纯模拟真实Ctrl+A/C按键 → 粘贴到Word(保留100%浏览器样式)
    """
    # 1. 初始化Chrome(关闭自动化提示,避免权限拦截)
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_experimental_option('useAutomationExtension', False)


    service = Service(executable_path=DRIVER_PATH)
    driver = webdriver.Chrome(service=service, options=options)


    try:
        # 2. 打开本地HTML文件(确保路径正确)
        abs_html_path = os.path.abspath(html_path).replace("\\", "/")
        html_url = f"file:///{abs_html_path}"
        driver.get(html_url)
        time.sleep(3)  # 等待页面+CSS+图片完全渲染

        # 3. 【核心修复】用Keys常量模拟真实Ctrl+A(解决编码报错)
        # 先聚焦页面,避免按键失效
        driver.find_element("tag name", "body").click()
        # 全选:Ctrl+A(用Keys模块传递标准按键指令)
        driver.find_element("tag name", "body").send_keys(Keys.CONTROL, "a")
        time.sleep(1)
        logger.debug("✅ 已执行Ctrl+A全选内容")

        # 4. 复制:Ctrl+C(同样用Keys模块)
        driver.find_element("tag name", "body").send_keys(Keys.CONTROL, "c")
        time.sleep(1)
        logger.debug("✅ 已执行Ctrl+C复制内容到剪贴板")

        # 5. Word粘贴(强制保留HTML源格式)
        word = win32.Dispatch("Word.Application")
        word.Visible = True
        doc = word.Documents.Add()

        # 粘贴核心代码(保留所有样式:字体/行距/表格/图片)
        doc.Content.PasteSpecial(
            Link=False,
            DisplayAsIcon=False,
            DataType=10,  # 10 = HTML Format,和手动粘贴"保留源格式"一致
            Placement=0,
            IconIndex=0
        )
        logger.debug("✅ 已粘贴到Word(保留浏览器原始样式)")

        docx_abs_path = os.path.join(MEDIA_DIR, create_random_file_name('.docx'))  # docx保存的绝对路径
        # 6. 保存并清理
        doc.SaveAs2(docx_abs_path, FileFormat=16)
        doc.Close()
        word.Quit()
        logger.success(f"html转docx转换完成!文件:{docx_abs_path}")
        return docx_abs_path

    except Exception as e:
        logger.error(f"❌ 失败原因:{str(e)}")
        return ''

    finally:
        driver.quit()
相关推荐
小糖学代码几秒前
LLM系列:2.pytorch入门:3.基本优化思想与最小二乘法
人工智能·python·算法·机器学习·ai·数据挖掘·最小二乘法
21439656 分钟前
如何提升SQL数据更新的安全性_使用行级锁与悲观锁机制
jvm·数据库·python
叶子丶苏8 分钟前
第二节_机器学习基本知识点
人工智能·python·机器学习·数据科学
SHoM SSER25 分钟前
SQL之CASE WHEN用法详解
数据库·python·sql
2401_8359568134 分钟前
Golang怎么做代码热更新_Golang热更新教程【精通】
jvm·数据库·python
justjinji37 分钟前
如何解决Oracle JDBC驱动版本的兼容性问题_ojdbc8.jar与JDK版本的对应关系
jvm·数据库·python
2301_777599371 小时前
CSS中如何让浮动元素撑开父容器_深度解析清除浮动
jvm·数据库·python
2401_871696521 小时前
c++如何将程序的私有配置信息加密保存为.enc格式的二进制文件【详解】
jvm·数据库·python
2301_775148151 小时前
Redis如何管理高频写入下的AOF文件膨胀_通过调低auto-aof-rewrite-percentage提速重写
jvm·数据库·python
weixin_424999361 小时前
c++如何利用内存映射读取超大文件_CreateFileMapping与mmap【进阶】
jvm·数据库·python