<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 實用技:將 Office 文件轉為 PDF

          共 4954字,需瀏覽 10分鐘

           ·

          2020-11-06 05:15

          ?△點擊上方Python貓”關注 ,回復“1”領取電子書

          文 |?潮汐

          來源:Python 技術「ID: pythonall」

          在平時的工作中,難免需要一些 小Tip 來解決工作中遇到的問題,今天的文章給大家安利一個方便快捷的小技巧,將 Office(doc/docx/ppt/pptx/xls/xlsx)文件批量或者單一文件轉換為 PDF 文件。不過在做具體操作之前需要在 PC 安裝好 Office,再利用 Python 的 win32com 包來實現 Office 文件的轉換操作。

          安裝 win32com

          在實戰(zhàn)之前,需要安裝 Python 的 win32com,詳細安裝步驟如下:

          使用 pip 命令安裝


          pip?install?pywin32

          如果我們遇到安裝錯誤,可以通過python -m pip install --upgrade pip更新云端的方式再進行安裝即可:


          python?-m?pip?install?--upgrade?pip?

          下載離線安裝包安裝

          如果 pip 命令未安裝成功的話還可以下載離線包安裝,方法步驟如下:首先在官網選擇對應的 Python 版本下載離線包:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/ 下載好后傻瓜式安裝好即可。

          文件轉換邏輯

          詳細代碼如下:

          class?PDFConverter:
          ????def?__init__(self,?pathname,?export='.'):
          ????????self._handle_postfix?=?['doc',?'docx',?'ppt',?'pptx',?'xls',?'xlsx']?#?支持轉換的文件類型
          ????????self._filename_list?=?list()??#列出文件
          ????????self._export_folder?=?os.path.join(os.path.abspath('.'),?'file_server/pdfconver')
          ????????if?not?os.path.exists(self._export_folder):
          ????????????os.mkdir(self._export_folder)
          ????????self._enumerate_filename(pathname)

          ????def?_enumerate_filename(self,?pathname):
          ????????'''
          ????????讀取所有文件名
          ????????'''

          ????????full_pathname?=?os.path.abspath(pathname)
          ????????if?os.path.isfile(full_pathname):
          ????????????if?self._is_legal_postfix(full_pathname):
          ????????????????self._filename_list.append(full_pathname)
          ????????????else:
          ????????????????raise?TypeError('文件?{}?后綴名不合法!僅支持如下文件類型:{}。'.format(pathname,?'、'.join(self._handle_postfix)))
          ????????elif?os.path.isdir(full_pathname):
          ????????????for?relpath,?_,?files?in?os.walk(full_pathname):
          ????????????????for?name?in?files:
          ????????????????????filename?=?os.path.join(full_pathname,?relpath,?name)
          ????????????????????if?self._is_legal_postfix(filename):
          ????????????????????????self._filename_list.append(os.path.join(filename))
          ????????else:
          ????????????raise?TypeError('文件/文件夾?{}?不存在或不合法!'.format(pathname))

          ????def?_is_legal_postfix(self,?filename):
          ????????return?filename.split('.')[-1].lower()?in?self._handle_postfix?and?not?os.path.basename(filename).startswith(
          ????????????'~')

          ????def?run_conver(self):
          ????????print('需要轉換的文件數是:',?len(self._filename_list))
          ????????for?filename?in?self._filename_list:
          ????????????postfix?=?filename.split('.')[-1].lower()
          ????????????funcCall?=?getattr(self,?postfix)
          ????????????print('原文件:',?filename)
          ????????????funcCall(filename)
          ????????print('轉換完成!')

          doc/docx 轉換為 PDF

          doc/docx 轉換為 PDF 部分代碼如下所示:


          ????def?doc(self,?filename):
          ????????name?=?os.path.basename(filename).split('.')[0]?+?'.pdf'
          ????????exportfile?=?os.path.join(self._export_folder,?name)
          ????????print('保存 PDF 文件:',?exportfile)
          ????????gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',?0,?8,?4)
          ????????pythoncom.CoInitialize()
          ????????w?=?Dispatch("Word.Application")
          ????????pythoncom.CoInitialize()??#?加上防止?CoInitialize?未加載
          ????????doc?=?w.Documents.Open(filename)
          ????????doc.ExportAsFixedFormat(exportfile,?constants.wdExportFormatPDF,
          ????????????????????????????????Item=constants.wdExportDocumentWithMarkup,
          ????????????????????????????????CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
          ????????w.Quit(constants.wdDoNotSaveChanges)
          ?def?docx(self,?filename):
          ????????self.doc(filename)

          ppt/pptx 轉換為 PDF

          ppt/pptx 轉換為 PDF 部分代碼如下:


          ?def?ppt(self,?filename):
          ????????name?=?os.path.basename(filename).split('.')[0]?+?'.pdf'
          ????????exportfile?=?os.path.join(self._export_folder,?name)
          ????????gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',?0,?8,?4)
          ????????pythoncom.CoInitialize()
          ????????p?=?Dispatch("PowerPoint.Application")
          ????????pythoncom.CoInitialize()
          ????????ppt?=?p.Presentations.Open(filename,?False,?False,?False)
          ????????ppt.ExportAsFixedFormat(exportfile,?2,?PrintRange=None)
          ????????print('保存 PDF 文件:',?exportfile)
          ????????p.Quit()

          ????def?pptx(self,?filename):
          ????????self.ppt(filename)

          xls/xlsx 轉換為 PDF

          ????def?xls(self,?filename):
          ????????name?=?os.path.basename(filename).split('.')[0]?+?'.pdf'
          ????????exportfile?=?os.path.join(self._export_folder,?name)
          ????????pythoncom.CoInitialize()
          ????????xlApp?=?DispatchEx("Excel.Application")
          ????????pythoncom.CoInitialize()
          ????????xlApp.Visible?=?False
          ????????xlApp.DisplayAlerts?=?0
          ????????books?=?xlApp.Workbooks.Open(filename,?False)
          ????????books.ExportAsFixedFormat(0,?exportfile)
          ????????books.Close(False)
          ????????print('保存 PDF 文件:',?exportfile)
          ????????xlApp.Quit()

          ????def?xlsx(self,?filename):
          ????????self.xls(filename)?

          執(zhí)行轉換邏輯

          if?__name__?==?"__main__":
          ????#?支持文件夾批量導入
          ????#folder?=?'tmp'
          ????#pathname?=?os.path.join(os.path.abspath('.'),?folder)
          ????#?也支持單個文件的轉換
          ????pathname?=?"G:/python_study/test.doc"
          ????pdfConverter?=?PDFConverter(pathname)
          ????pdfConverter.run_conver()

          總結

          今天的文章主要是 Python 實戰(zhàn)之小工具的運用,希望對大家有所幫助。

          Python貓技術交流群開放啦!群里既有國內一二線大廠在職員工,也有國內外高校在讀學生,既有十多年碼齡的編程老鳥,也有中小學剛剛入門的新人,學習氛圍良好!想入群的同學,請在公號內回復『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠勿擾!)~

          近期熱門文章推薦:

          耗時兩年,我終于出了一本電子書!

          如何用 Python 快速揭示數據之間的各種關系?

          Python有序字典的兩個小“驚喜”~~

          Python到底是強類型語言,還是弱類型語言?

          感謝創(chuàng)作者的好文
          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美性爱巨大HD | 91精品一区 | 日韩拍拍拍 | 免费看黄片的视频 | 亚洲国产麻豆视频 |