python win32转pdf 横版_使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)...
一些重要文檔格式之間的互轉在目前顯得尤為重要,pdf作為通用格式在現在各個平臺上兼容性是最好的,所以寫python腳本將這些word文檔批量轉換pdf是最好的解決方案。
由于windows系統對于word文檔有天然的兼容性優勢,所以轉換起來很簡單,普遍上是通過comtypes模塊。
pip3 install comtypes
from comtypes.client import CreateObject
import os
def wd_to_pdf(folder):
#獲取指定目錄下面的所有文件
files = os.listdir(folder)
#獲取word類型的文件放到一個列表里面
wdfiles = [f for f in files if f.endswith((".doc", ".docx"))]
for wdfile in wdfiles:
#將word文件放到指定的路徑下面
wdPath = os.path.join(folder, wdfile)
#設置將要存放pdf文件的路徑
pdfPath = wdPath
#判斷是否已經存在對應的pdf文件,如果不存在就加入到存放pdf的路徑內
if pdfPath[-3:] != 'pdf':
pdfPath = pdfPath + ".pdf"
#將word文檔轉化為pdf文件,先打開word所在路徑文件,然后在處理后保存pdf文件,最后關閉
pdfCreate = self.wdToPDF.Documents.Open(wdPath)
pdfCreate.SaveAs(pdfPath, self.wdFormatPDF)
其實難點還是在Linux系統下如何轉換,因為comtypes依賴的win32com模塊在linux下是無法使用的,所以在linux下面推薦另外一套解決方案也就是LibreOffice,LibreOffice 能夠與 Microsoft Office 系列以及其它開源辦公軟件深度兼容,且支持的文檔格式相當全面。
首先卸載當前系統的libreoffice,因為大多數系統默認安裝的都是低版本,我們要使用的是最新穩定版
yum remove libreoffice-*
安裝java依賴
yum -y install java-1.8.0-openjdk*
然后將剛才下載的gz壓縮包解壓后安裝
tar xvf LibreOffice_6.2.5.2_Linux_x86-64_rpm.tar.gz
cd LibreOffice_6.2.5.2_Linux_x86-64_rpm/RPMS/
yum localinstall *.rpm
最后安裝一些依賴
yum install cairo cups-libs libSM
yum install ibus
yum install libreoffice-headless
在命令行輸入
libreoffice -help
會顯示幫助文檔就沒問題了
解決中文亂碼問題
安裝windows字體(不裝,會有亂碼)將windows的字體復制到linux上C:WindowsFonts* windows上所有的字體(嘗試過只復制部分,還是有亂碼,全部字體就不會亂碼了),上傳到linux的/usr/share/fonts/chinese('chinese'目錄是我自己建的,mkdir chinese)
chmod -R 755 /usr/share/fonts/chinese // 修改權限
fc-cache -fv // 建立字體緩存
fc-list | grep chinese // 可以查看到已安裝新增的字體了
如果你嫌麻煩,也可以修改系統語言來支持中文
執行命令:
yum groupinstall "fonts"
安裝成功后,
打開
vim /etc/locale.conf
按鍵 i 進入編輯模式, 把內容改為
LANG="zh_CN.UTF-8"
wq 存盤
然后重啟服務器reboot
之后也可以支持中文轉換了
轉換命令
libreoffice6.2 --headless --convert-to pdf /root/4321.docx
此時,我們要改造一下轉換腳本,做到可以兼容windows和Linx雙系統,任意系統下都可以調用腳本進行轉換
import subprocess
import os
try:
from comtypes import client
except ImportError:
client = None
def doc2pdf(doc):
"""
convert a doc/docx document to pdf format
:param doc: path to document
"""
doc = os.path.abspath(doc) # bugfix - searching files in windows/system32
if client is None:
return doc2pdf_linux(doc)
name, ext = os.path.splitext(doc)
try:
word = client.DispatchEx("Word.Application")
worddoc = word.Documents.Open(doc)
worddoc.SaveAs(name + '.pdf', FileFormat=17)
except Exception:
raise
finally:
worddoc.Close()
word.Quit()
def doc2pdf_linux(doc):
"""
convert a doc/docx document to pdf format (linux only, requires libreoffice)
:param doc: path to document
"""
cmd = 'libreoffice6.2 --headless --convert-to pdf'.split() + [doc]
p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
p.wait(timeout=10)
stdout, stderr = p.communicate()
if stderr:
raise subprocess.SubprocessError(stderr)
簡直完美,可以收工了
總結
以上是生活随笔為你收集整理的python win32转pdf 横版_使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js aes加密_nodejs中使用Cr
- 下一篇: python爬取方式_Python 爬虫