Word转PDF/docx转pdf
转载自https://www.jianshu.com/p/3a11f4b141fc
方法1
使用office组件将word转换成PDF文件(缺点:只支持windows平台)
原理:使用python 的 win32 库 调用word底层vba,将 word 转成 pdf
- 安装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
- 安装Libreoffice,安装地址
- 设置环境变量(一定要设置)
- 安装完毕之后打开控制台,Windows输入:soffice,Liunx输入:libreoffice6.4(6.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.