您确定您的用例绝对需要unoconv吗?它很强大,但是由于它需要一个成熟的 LibreOffice 才能运行,所以它是:1)转换文件有点慢;2)启动缓慢;3) 使用大量内存;4) 不是很可扩展。
为什么不试试Apache Tika(它基于Apache POI)?对于大多数日常任务来说,它更轻量级并且绰绰有余。
启动 Tika 也可以处理 PDF 文件,或者使用魔法来区分文件类型并使用单独的pdftotext实用程序或类似的工具。这是您可以用来将办公文件转换为文本的简化版本:
import subprocess
from django.db import models
import magic # https://github.com/ahupp/python-magic
PDFTOTEXT_COMMAND = '/usr/bin/pdftotext'
JAVA_COMMAND = '/usr/bin/java'
TIKA_PATH = '/path/to/tika.jar'
PDFTOTEXT_OPTIONS = [u'-', ]
JAVA_OPTIONS = [ u'-jar', TIKA_PATH, u'--text', ]
mime = magic.Magic(mime=True)
class UploadedFileModel(models.Model):
file = models.FileField(upload_to='files/')
def get_txt(self):
if not ('application/pdf' in mime.from_file(
self.file.path.encode('utf-8'))):
option_list = [JAVA_COMMAND, ] + JAVA_OPTIONS + [self.file.path, ]
else:
option_list = [PDFTOTEXT_COMMAND, ] + [self.file.path, ] +\
PDFTOTEXT_OPTIONS
pipe = subprocess.Popen(option_list, stdout=subprocess.PIPE)
txt = pipe.communicate()[0]
if pipe.returncode:
return None
else:
return txt
PS
该错误unoconv: Cannot find a suitable pyuno library and python binary combination
可能与许多问题有关。如果您不提供其他信息,就无法确定。例如,它可能是路径的问题。
请务必查看相关的unoconv
故障排除指南: