Word转PDF/docx转pdf

转载自https://www.jianshu.com/p/3a11f4b141fc

方法1

使用office组件将word转换成PDF文件(缺点:只支持windows平台)
原理:使用python 的 win32 库 调用word底层vba,将 word 转成 pdf

  1. 安装win32库pip install pywin32
    本地选装office套件,可以安装比较稳定的版本,比如office2010
from win32com.client import gencache
from win32com.client import constants, gencache

def createPdf(wordPath, pdfPath):
    """
    word转pdf
    :param wordPath: word文件路径
    :param pdfPath:  生成pdf文件路径
    """
    word = gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Open(wordPath, ReadOnly=1)
    doc.ExportAsFixedFormat(pdfPath,
                            constants.wdExportFormatPDF,
                            Item=constants.wdExportDocumentWithMarkup,
                            CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
    word.Quit(constants.wdDoNotSaveChanges)
if __name__ == '__main__':
    # 注意!!! word文件路径和生成pdf文件路径一定要使用绝对路径
    createPdf('C:\\Users\\Administrator\\Desktop\\test.docx','C:\\Users\\Administrator\\Desktop\\1.pdf') 

方法2

使用Libreoffice组件将word转换成PDF文件(可跨平台,但操作略微不同)
原理:使用python os库执行控制台指令,调用Libreoffice将word转换成PDF

  1. 安装Libreoffice,安装地址
  2. 设置环境变量(一定要设置)
  3. 安装完毕之后打开控制台,Windows输入:soffice,Liunx输入:libreoffice6.4(6.4是版本,安装不同版本这个数字不一样)
  4. 如果没有提示什么异常情况就安装成功了
# Windows 版代码:
import os
import_file_name = "./test/test.docx"
output_file_path = "./test/"
os.system("soffice --headless --convert-to pdf %s --outdir %s" % (import_file_name, output_file_path))


# Linux 版代码:
import os
import_file_name = "/test/test.docx"
output_file_path = "/test/"
os.system("libreoffice6.4 --headless --convert-to pdf %s --outdir %s" % (import_file_name, output_file_path))

Word转PDF/docx转pdf

下载 http://blog.alivate.com.au/poppler-windows/ (网页打开很慢,需要点耐心) 并解压,比如解压到 C:\Program Files (x86)\poppler-0.68.0_x86

PDFTOPPMPATH = r"C:\Program Files (x86)\poppler-0.68.0_x86\bin\pdftoppm.exe" # 解压的 pdftoppm.exe 的路径
PDFFILE = r"个人简历.pdf"

import subprocess
subprocess.Popen(f'"{PDFTOPPMPATH}" -r 300 -png "{PDFFILE}" output_filenameo') # -r 参数可用来指定每英寸点数(dpi),该值越大越清晰

PDF 转为图片格式

http://blog.alivate.com.au/poppler-windows/ 下载并解压到自定义目录(下载很慢,需要有耐心),比如解压到 C:\Program Files (x86)\poppler-0.68.0_x86

PDFTOPPMPATH = r"C:\Program Files (x86)\poppler-0.68.0_x86\bin\pdftoppm.exe" # 解压目录中的 pdftoppm.exe 路径
PDFFILE = r"input.pdf"

import subprocess
print("准备转换")
subprocess.Popen(f'"{PDFTOPPMPATH}" -r 300 -png "{PDFFILE}" out') # -r 参数可用来指定每英寸点数(dpi),该值越大越清晰
print("完成转换")

pdftoppm 其他用法

  • 将 pdf 转换为 PNG 图片: pdftoppm -png -r 300 input.pdf output
  • 将 pdf 转换为 TIFF 图片: pdftoppm -tiff -r 300 input.pdf output
  • 只抽取 input.pdf 的第二页到第五页,转为 JPG: pdftoppm -jpeg -r 300 -f 2 -l 5 input.pdf output
  • 只抽取 input.pdf 的奇数页,转为 JPG: pdftoppm -jpeg -r 300 -o input.pdf output
  • 只抽取 input.pdf 的偶数页,转为 JPG: pdftoppm -jpeg -r 300 -e input.pdf output
  • 只转换第一页,输出档名不加编号: pdftoppm -jpeg -r 300 -singlefile input.pdf output
  • 只转换第三页,输出档名不加编号: pdftoppm -jpeg -r 300 -f 3 -singlefile input.pdf output
  • 让输出图片的长边长度为 640 像素: pdftoppm -jpeg -scale-to 640 input.pdf output
  • 让输出图片的宽度为 640 像素,高度依比例调整: pdftoppm -jpeg -scale-to-x 640 -scale-to-y -1 input.pdf output
  • 让输出图片的高度为 640 像素,宽度依比例调整: pdftoppm -jpeg -scale-to-x -1 -scale-to-y 640 input.pdf output
  • 裁切一个宽度为 640 像素、高度为 360 像素的区域,此区域距离左边界 60 像素、距离上边界 80 像素: pdftoppm -jpeg -x 60 -y 80 -W 640 -H 360 input.pdf output

Q.E.D.


做一个热爱生活的人