如何用python函数将docx转换为pdf(WINDOWS)?

2cmtqfgy  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(129)

我正在用一个python函数编写一个env来将docx转换为pdf文件。我用 Postman 发送base64。然后我挂载docx文件(一切都还正常),但是当它将docx文件转换为pdf时,出现了一个错误。我想这是因为我的env上没有Office?没有办公室我怎么能修好它?谢谢

import sys
import os
import comtypes.client
import pythoncom
import uuid
import requests
from docx import Document
import base64
from os import listdir
from os.path import isfile, join
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
  bytesDoc = req.get_json()['base']

  path = '/users/echornet/pruebas/'
  newFile = open(path + 'prueba.docx','wb')
  newFile.write(base64.b64decode(bytesDoc))

  newFile.close()
  wdFormatPDF = 17

  out_file = path + 'prueba.pdf'
  word = comtypes.client.CreateObject('Word.Application')

  doc = word.Documents.Open(newFile)
  doc.SaveAs(out_file, FileFormat=wdFormatPDF)
  doc.Close()

这是我得到的错误。我得到了从base64创建的docx,但没有转换。

System.Private.CoreLib:执行函数时出现异常:Functions.FunConverter. System.Private.CoreLib:结果:失败异常:属性错误:模块“comtypes. gen. Word”没有属性“Application”堆栈:文件“C:\PruebaFunction\ConvEnv\lib\site-packages\azure\functions_worker\dispatcher.py ",line 288,in_handle__invocation_request self.*run_sync_func,invocation_id,fi. func,args)文件" C:\Users\echornet\AppData\Local\Programs\Python\Python36\lib\concurrent\futures\thread.py ",第55行,运行结果= self。fn( self. args,**self. kwargs)文件" C:\PruebaFunction\ConvEnv\lib\site-packages\azure\functions_worker\dispatcher.py ",line 347,in__run_sync_func return func(params)File" C:\PruebaFunction\FunConverter__init。py”,第32行,在main word = comtypes中。委托人CreateObject('Word.应用程序”)文件“C:\PruebaFunction\ConvEnv\lib\site-packages\comtypes\client__init_。py",第250行,在CreateObject return_manage(obj,clsid,interface = interface)文件" C:\PruebaFunction\ConvEnv\lib\site-packages\comtypes\client__init__。py",line 188,in_manage obj = GetBestInterface(obj)File" C:\PruebaFunction\ConvEnv\lib\site-packages\comtypes\client__init__。py",line 112,in GetBestInterface interface = getattr(mod,itf_name)

xxhby3vn

xxhby3vn1#

你可以尝试用lib win32com来完成

# -*- encoding: utf-8 -*-
import  os
from win32com import client
#pip instatll win32com
def doc2pdf(doc_name, pdf_name):
    """
    :word to pdf
    :param doc_name word file name
    :param pdf_name to_pdf file name
    """
    try:
        word = client.DispatchEx("Word.Application")
        if os.path.exists(pdf_name):
            os.remove(pdf_name)
        worddoc = word.Documents.Open(doc_name,ReadOnly = 1)
        worddoc.SaveAs(pdf_name, FileFormat = 17)
        worddoc.Close()
        return pdf_name
    except:
        return 1
if __name__=='__main__':
    doc_name = "f:/test.doc"
    ftp_name = "f:/test.pdf"
    doc2pdf(doc_name, ftp_name)
pgx2nnw8

pgx2nnw82#

你可以使用python库docx2pdf,它在内部使用win32comhttps://github.com/AlJohri/docx2pdf
安装:

pip install docx2pdf

使用方法:

from docx2pdf import convert
convert("input.docx", "output.pdf")

正如您提到的,这种方法确实需要安装Microsoft Office。
免责声明:我写了这个库和命令行工具。

3vpjnl9f

3vpjnl9f3#

您可以使用Aspose.Words for Python来convert DOCX and other document formats to PDF。代码很简单-加载文档并将其保存为PDF:

import aspose.words as aw

doc = aw.Document("in.docx")
doc.save("out.pdf")

相关问题