使用python将rtf转换为pdf

使用python将rtf转换为pdf,python,pdf,rtf,Python,Pdf,Rtf,我是python语言的新手,有一项任务是使用python将rtf转换为pdf。我在谷歌上搜索并找到了一些代码-(不完全是rtf到pdf),但我试着处理它,并根据我的要求进行了更改。但我无法解决它 我使用了以下代码: import sys import os import comtypes.client #import win32com.client rtfFormatPDF = 17 in_file = os.path.abspath(sys.argv[1]) out_file = os.pa

我是python语言的新手,有一项任务是使用python将rtf转换为pdf。我在谷歌上搜索并找到了一些代码-(不完全是rtf到pdf),但我试着处理它,并根据我的要求进行了更改。但我无法解决它

我使用了以下代码:

import sys
import os
import comtypes.client
#import win32com.client
rtfFormatPDF = 17

in_file = os.path.abspath(sys.argv[1])
out_file = os.path.abspath(sys.argv[2])

rtf= comtypes.client.CreateObject('Rtf.Application')

rtf.Visible = True
doc = rtf.Documents.Open(in_file)
doc.SaveAs(out_file, FileFormat=rtfFormatPDF)
doc.Close()
rtf.Quit()
但它抛出了下面的错误

Traceback (most recent call last):
  File "C:/Python34/Lib/idlelib/rtf_to_pdf.py", line 12, in <module>
    word = comtypes.client.CreateObject('Rtf.Application')
  File "C:\Python34\lib\site-packages\comtypes\client\__init__.py", line 227, in CreateObject
    clsid = comtypes.GUID.from_progid(progid)
  File "C:\Python34\lib\site-packages\comtypes\GUID.py", line 78, in from_progid
    _CLSIDFromProgID(str(progid), byref(inst))
  File "_ctypes/callproc.c", line 920, in GetResult
OSError: [WinError -2147221005] Invalid class string
回溯(最近一次呼叫最后一次):
文件“C:/Python34/Lib/idlelib/rtf_to_pdf.py”,第12行,在
word=comtypes.client.CreateObject('Rtf.Application')
CreateObject中第227行的文件“C:\Python34\lib\site packages\comtypes\client\\uuuuu init\uuuu.py”
clsid=comtypes.GUID.from_progid(progid)
文件“C:\Python34\lib\site packages\comtypes\GUID.py”,第78行,from\u progid
_CLSIDFromProgID(str(progid),byref(inst))
文件“\u ctypes/callproc.c”,第920行,在GetResult中
OSError:[WinError-2147221005]无效的类字符串
有人能帮我吗? 如果有人能找到更好更快的方法,我将不胜感激。我有大约200000个文件要转换


Anisha

我使用了Marks的建议,并将其改回Word.Application,我的源代码指向rtf文件。很好用这个过程很慢,但仍然比我的团队使用的JAVA应用程序快。我在问题中附上了最后的代码

最终代码: 使用与Word应用程序配合使用的代码完成:

import sys
import os,os.path
import comtypes.client

wdFormatPDF = 17

input_dir = 'input directory'
output_dir = 'output directory'

for subdir, dirs, files in os.walk(input_dir):
    for file in files:
        in_file = os.path.join(subdir, file)
        output_file = file.split('.')[0]
        out_file = output_dir+output_file+'.pdf'
        word = comtypes.client.CreateObject('Word.Application')

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

如果您的系统中有Libre Office,您将获得最佳解决方案

导入操作系统
system('soffice--headless--convert to pdf filename.rtf')
#system('libreoffice--headless-convert to pdf filename.rtf')
#system('libreoffice6.3--headless-convert to pdf filename.rtf')

命令可能因版本和平台而异。但这将是我有过的最好的解决方案。

您从哪里得到“Rtf.Application”是有效com对象的信息?我猜您找到了一些将Word文档转换为PDF的代码,并将“Word.Application”替换为“Rtf.Application”。是的。这是真的!试图找到一个替代品,但没有运气!您需要python解决方案还是只需要200000个文件的解决方案?如果python不是必需的,请尝试LibreOffice:
LibreOffice--headless-convert to pdf filename.rtf
@Carsten,这样可以说明一点,如果ProgID设置回“Word.Application”,您认为它会工作吗?好吧,python不是必需的,我可以尝试使用LibreOffice。这意味着Python中没有解决方案?
os.path.splitext
可以更好地获得文件名,而无需扩展。安装MS word就可以使用它。