Ofe*_*dan 16 python pdf docx pythonanywhere python-docx
我正在处理一个试图开发网络应用程序的问题,其中一部分将上传的docx文件转换为pdf文件(经过一些处理后).使用python-docx和其他方法,我不需要安装word的Windows机器,甚至linux上的libreoffice,用于大多数处理(我的web服务器是pythonanywhere - linux但没有libreoffice,没有sudo或apt install权限).但转换为pdf似乎需要其中之一.通过在这里和其他地方探索问题,这是我到目前为止:
import subprocess
try:
from comtypes import client
except ImportError:
client = None
def doc2pdf(doc):
"""
convert a doc/docx document to pdf format
:param doc: path to document
"""
doc = os.path.abspath(doc) # bugfix - searching files in windows/system32
if client is None:
return doc2pdf_linux(doc)
name, ext = os.path.splitext(doc)
try:
word = client.CreateObject('Word.Application')
worddoc = word.Documents.Open(doc)
worddoc.SaveAs(name + '.pdf', FileFormat=17)
except Exception:
raise
finally:
worddoc.Close()
word.Quit()
def doc2pdf_linux(doc):
"""
convert a doc/docx document to pdf format (linux only, requires libreoffice)
:param doc: path to document
"""
cmd = 'libreoffice --convert-to pdf'.split() + [doc]
p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
p.wait(timeout=10)
stdout, stderr = p.communicate()
if stderr:
raise subprocess.SubprocessError(stderr)
Run Code Online (Sandbox Code Playgroud)
如您所见,一种方法需要comtypes,另一种方法需要libreoffice作为子流程.除了切换到更复杂的托管服务器,还有什么解决方案吗?
jcg*_*le3 11
PythonAnywhere帮助页面提供了有关使用PDF文件的信息:https://help.pythonanywhere.com/pages/PDF
简介:PythonAnywhere安装了许多用于PDF操作的Python包,其中一个可以做你想要的.但是,abiword对我来说,炮轰似乎最容易.shell命令abiword --to=pdf filetoconvert.docx会将docx文件转换为PDF,并生成一个filetoconvert.pdf与docx位于同一目录中的文件.请注意,此命令将向标记错误流输出错误消息XDG_RUNTIME_DIR(或者至少它对我而言),但它仍然有效,并且可以忽略错误消息.