python实现将docx文件转化为pdf文件(windows,linux两种不同处理办法)

一、在windows系统中

# -*- encoding:utf-8 -*-
"""
  windows系统下实现docx->pdf
"""

from win32com.client import Dispatch, constants, gencache


def doc2pdf(input, output):
    w = Dispatch('Word.Application')
    try:
        # 打开文件
        doc = w.Documents.Open(input, ReadOnly=1)
        # 转换文件
        doc.ExportAsFixedFormat(output, constants.wdExportFormatPDF,
                                Item=constants.wdExportDocumentWithMarkup,
                                CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
        return True
    except:
        return False
    finally:
        w.Quit(constants.wdDoNotSaveChanges)


def GenerateSupport():
    gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)


def main():
    input_file = r'绝对地址/文件名.docx'
    output_file = r'绝对地址/文件名.pdf'
    # GenerateSupport()
    rc = doc2pdf(input_file , output_file )
    if rc:
        print('转换成功')
    else:
        print('转换失败')


if __name__ == '__main__':
    main()

2.在linux系统中

# -*- coding: utf-8 -*-
"""
linux platform word to pdf
"""
import subprocess
import os

try:
    from comtypes import client
except ImportError:
    client = None 

try:
    from win32com.client import constants, gencache
except ImportError:
    constants = None
    gencache = None


def doc2pdf_linux(docPath, pdfPath):
    """
    允许的文档格式:doc,docx
    仅在linux平台下可以
    需要在linux中下载好libreoffice
    """
    #  注意cmd中的libreoffice要和linux中安装的一致
    cmd = 'libreoffice --headless --convert-to pdf'.split() + [docPath] + ['--outdir'] + [pdfPath]
    # cmd = 'libreoffice6.2 --headless --convert-to pdf'.split() + [docPath]
    p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    p.wait(timeout=30)  # 停顿30秒等待转化
    stdout, stderr = p.communicate()
    if stderr:
        raise subprocess.SubprocessError(stderr) 


def doc2pdf(docPath, pdfPath):
    """
    注意使用绝对路径
    pdf的生成只写路径,不写名字
    """
    docPathTrue = os.path.abspath(docPath)  # bugfix - searching files in windows/system32
    if client is None:#判断环境,linux环境这里肯定为None
        return doc2pdf_linux(docPathTrue, pdfPath)
    word = gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(docPathTrue, ReadOnly=1)
    doc.ExportAsFixedFormat(pdfPath,
                            constants.wdExportFormatPDF,
                            Item=constants.wdExportDocumentWithMarkup,
                            CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
    word.Quit(constants.wdDoNotSaveChanges)


if __name__ == '__main__':
    wordpath='/myproject/jsg/media/attached/测试文档.docx'
    pdfpath='/myproject/jsg/media/attached'
    doc2pdf(wordpath,pdfpath)

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Pythondocx2pdf库来批量将Word文档转换为PDF格式。首先需要安装docx2pdf库,可以使用pip命令进行安装: ``` pip install docx2pdf ``` 安装完成后,可以使用以下代码将指定目录下的所有Word文档转换为PDF格式: ```python import os from docx2pdf import convert # 指定Word文档所在目录 docx_dir = 'path/to/docx/files' # 遍历目录下的所有Word文档 for filename in os.listdir(docx_dir): if filename.endswith('.docx'): # 将Word文档转换为PDF格式 docx_path = os.path.join(docx_dir, filename) pdf_path = os.path.splitext(docx_path)[] + '.pdf' convert(docx_path, pdf_path) ``` 以上代码会将指定目录下的所有.docx文件转换为.pdf文件,保存在同一目录下。 ### 回答2: 在日常工作和学习中,有时候需要将Word文档批量转换为PDF格式。手动一一转换费时费力,此时可以使用Python编程实现自动批量转换。 具体步骤如下: 第一步:安装必要的库 为了实现批量转换,需要安装Python-docx库和win32com库。 Python-docx库是用来处理Word文档的Python库,可以实现对Word文档进行读取、修改和创建操作。而win32com库是Python调用Microsoft Office的接口,可以实现对Word文档的打开、关闭、保存和导出为PDF等操作。 在命令行中使用pip安装Python-docx和pywin32库: pip install python-docx pip install pywin32 第二步:编写转换代码 需要编写一个Python脚本,读取指定目录下所有的Word文档,使用win32com库打开每个文档,将其保存为PDF格式,最后关闭。 示例代码: import sys import os import comtypes.client from docx import Document def convert_word_to_pdf(word_path): # 打开Word文档 in_file = os.path.abspath(word_path) word = comtypes.client.CreateObject('Word.Application') doc = word.Documents.Open(in_file) # 保存为PDF格式 pdf_path = os.path.splitext(in_file)[0]+'.pdf' doc.SaveAs(pdf_path, FileFormat=17) # 关闭文档 doc.Close() # 关闭Word程序 word.Quit() if __name__ == '__main__': # 获取指定目录下所有Word文档 folder_path = sys.argv[1] for dirpath, dirnames, filenames in os.walk(folder_path): for filename in filenames: if filename.endswith('.docx') or filename.endswith('.doc'): word_path = os.path.join(dirpath, filename) # 转换为PDF格式 convert_word_to_pdf(word_path) 脚本中对于每个Word文档,获取其完整路径,并且使用convert_word_to_pdf函数将其转换为PDF格式。将此脚本保存为convert_word_to_pdf.py。 第三步:运行脚本 在命令行中进入脚本所在目录,调用脚本并传递要转换的文件夹路径作为参数,如下: python convert_word_to_pdf.py "C:\WordDocuments" 此命令会将"C:\WordDocuments"目录下的所有Word文档批量转换为PDF格式。最终转换后的PDF文件会与原Word文档保存在同一目录下。 总结: 使用Python批量将Word转为PDF可以使我们在日常工作中更加高效。通过Python-docx和win32com库的操作,可以实现自动读取、打开、保存和关闭Word文档,并将其导出为PDF文件。因此,提交给Python,完成批量操作也掌握着一定的技巧,对于节约时间和效率有着很好的提升。 ### 回答3: Python是一种强大而且易于学习的编程语言,可以创建各种各样的应用程序,包括与Word和PDF文档相关的功能。如果您需要批量将Word文档转换为PDF格式,可以使用Python和一些第三方库来自动化这个过程。 第一步是安装Python和必要的库。您需要安装Python,并在控制台中使用pip命令来安装python-docx和pywin32库。这些库提供与Word文档的交互功能,以及与操作系统进行交互的功能,例如访问文件系统和执行命令。 接下来,编写一个Python脚本,来扫描指定目录下的所有Word文档,并将其转换为PDF格式。以下是一个简单的Python代码示例: ``` import os import win32com.client from docx import Document # 设置目录路径和PDF输出路径 directory = './input' output_path = './output' # 用win32com打开Word应用程序 word = win32com.client.Dispatch('Word.Application') # 遍历目录,扫描.docx文件并转换为PDF for filename in os.listdir(directory): if filename.endswith('.docx'): # 读取Word文档并转换为PDF doc_path = os.path.join(directory, filename) doc = Document(doc_path) pdf_path = os.path.join(output_path, filename[:-5] + '.pdf') # 使用Word应用程序将文档保存为PDF word_doc = word.Documents.Open(doc_path) word_doc.SaveAs(pdf_path, FileFormat=17) word_doc.Close() # 关闭Word应用程序 word.Quit() ``` 这个脚本首先设置了输入和输出的目录路径,并使用win32com库打开Word应用程序。然后,它遍历输入目录中的所有.docx文件,并将其读取为Document对象。最后,它将每个文档保存为PDF文件,并将其输出到指定的输出路径。 最后,运行这个Python脚本即可批量将Word文档转换为PDF格式。这个过程非常简单,但是能帮助您自动化处理和转换文档,从而提高工作效率和减少手动操作的时间和劳动力成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值