You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中docx转PDF:cPanel环境下pythoncom报错求助

在cPanel环境下解决Django项目中Docx转PDF的问题

问题根源

pythoncom是Windows平台专属的COM组件库,cPanel服务器通常基于Linux系统,因此无法识别该库导致报错。同时docx2pdf在Windows依赖Microsoft Word的COM接口,Linux环境下需要依赖LibreOffice实现转换。

解决方案

1. 移除Windows专属代码

直接删除代码中所有与pythoncom相关的内容:

# 删掉这两行
import pythoncom
pythoncom.CoInitialize()

2. 配置Linux环境依赖

  • 在cPanel的Python虚拟环境中安装docx2pdf:
    pip install docx2pdf
    
  • 确保服务器已安装LibreOffice:
    • 有SSH权限的话,通过包管理器安装:
      # Debian/Ubuntu系统
      sudo apt-get update && sudo apt-get install libreoffice -y
      # CentOS/RHEL系统
      sudo yum install libreoffice -y
      
    • 无SSH权限则联系主机商协助安装LibreOffice。

3. 调整转换代码

若系统无法自动识别LibreOffice路径,可手动指定路径:

from docx2pdf import convert
from docxtpl import DocxTemplate

# 渲染模板并保存docx文件
doc = DocxTemplate("f.docx")
context = {'company_name': "lllll"}
doc.render(context)
doc.save("generated_doc.docx")

# 指定LibreOffice路径完成转换
convert('generated_doc.docx', libreoffice_path='/usr/bin/libreoffice')

4. 替代方案(LibreOffice无法安装时)

采用「Docx转HTML再转PDF」的方案:

  • 安装依赖包:
    pip install docx2html pdfkit
    
  • 服务器安装wkhtmltopdf(需SSH权限或联系主机商)
  • 转换代码示例:
    from docxtpl import DocxTemplate
    from docx2html import convert as docx_to_html
    from pdfkit import from_string
    
    # 渲染模板
    doc = DocxTemplate("f.docx")
    context = {'company_name': "lllll"}
    doc.render(context)
    doc.save("generated_doc.docx")
    
    # 转HTML再转PDF
    html_content = docx_to_html("generated_doc.docx")
    from_string(html_content, 'output.pdf')
    

原问题代码示例

pythoncom.CoInitialize()
doc = DocxTemplate("f.docx")
context = {'company_name': "lllll"}
doc.render(context)
doc.save("generated_doc.docx")
convert('generated_doc.docx')

内容的提问来源于stack exchange,提问作者Meisam Kamarei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:05:17