【轉】使用Python轉換PDF,Word/Excel/PPT/md/HTML都能轉!


轉自:https://blog.csdn.net/weixin_41846769/article/details/106682994

今天講的是各位一定會接觸到的PDF轉換,關於各種格式的文件轉換為PDF有很多第三方工具與網站可以實現,但是使用Python的好處不僅可以 批量轉換,同時一旦腳本寫完了以后就可以 一鍵執行,徹底解放雙手,那么本文就來盤一盤如何使用Python來將 Word/Excel/PPT/Markdown/Html等各種格式的文件轉換為PDF!

Word轉PDF

Word轉PDF應該是最常見的需求了,畢竟使用PDF格式可以更方便展示文檔,雖然在Word中可以直接導出為PDF格式,但是使用Python可以批量轉換,更加高效。

 

目前在Python中針對Word轉換為PDF的庫有很多,比如win32就可以調用word底層vba,將word轉成pdf,或者comtypes等,但是這些常用的庫僅能在Windows機器上運行,所以為了照顧mac用戶本文使用一個比較小眾的庫docx2pdf,看名字就能知道這是專門用於word轉pdf,安裝很簡單

pip install docx2pdf

使用也比win32等庫更簡潔,一行代碼導入一行代碼轉換即可

  1.  
    from docx2pdf  import convert
  2.  
    convert( "input.docx""output.pdf")

但是有人就會說雖然簡單,但是這個操作word本身就可以完成,好的接下來放大招,我們可以使用下面的代碼找到當前或者指定文件夾下的全部word文件

  1.  
    #查找當前目錄下的全部word文件
  2.  
    import os
  3.  
    import glob
  4.  
    from pathlib  import Path
  5.  
     
  6.  
    path = os.getcwd() + '/'
  7.  
    p =  Path(path) #初始化構造 Path對象
  8.  
    FileList=list(p.glob( "**/*.docx")) 

接下來只要寫一個循環就可以將該目錄下的全部word一次性轉換為PDF

  1.  
    for file  in  FileList:
  2.  
        convert(file,f "{file}.pdf")

就這樣,不到10行代碼,只要一秒,指定文件夾中5份Word就輕松轉換為PDF,現在還能使用我們之前自動化系列文章寫過的批量合並PDF結合一鍵合並這5份PDF!

Excel轉PDF

Excel轉PDF可能平時用的不多,但是作為Office全家桶中的重要工具,並且轉換完的表格可以復制所以我們也講一下。使用到的工具既不是常用的openpyxl也不是pandas,而是另一個專門用於處理PDF的庫fpdf

  1.  
    import pandas  as pd
  2.  
    import numpy  as np
  3.  
    df_1 = pd. DataFrame(np.random.randn( 102), columns=list(' AB'))

為了方便講解我們使用Pandas和NumPy來創建一個示例數據文件,當然也可以使用從本地讀取

現在可以使用下面的代碼將這個表格轉換為PDF

  1.  
    from fpdf import FPDF
  2.  
    pdf = FPDF()
  3.  
    pdf.add_page()
  4.  
    pdf.set_xy( 00)
  5.  
    pdf.set_font('arial', 'B',  14)
  6.  
    pdf.cell( 60)
  7.  
    pdf.cell( 7010, 'Excel to PDF',  02, 'C')
  8.  
    pdf.cell(- 40)
  9.  
    pdf.cell( 5010, 'Index Column',  10, 'C')
  10.  
    pdf.cell( 4010, 'A',  10, 'C')
  11.  
    pdf.cell( 4010, 'B',  12, 'C')
  12.  
    pdf.cell(- 90)
  13.  
    pdf.set_font('arial', '',  12)
  14.  
    for i in range( 0, len(df_ 1)):
  15.  
         col_ind = str(i)
  16.  
         col_a = str(df_ 1.A.iloc[i])
  17.  
         col_b = str(df_ 1.B.iloc[i])
  18.  
         pdf.cell( 5010, '%s' % (col_ind),  10, 'C')
  19.  
         pdf.cell( 4010, '%s' % (col_a),  00, 'C')
  20.  
         pdf.cell( 4010, '%s' % (col_b),  02, 'C')
  21.  
         pdf.cell(- 90)
  22.  
    pdf.output('Excel 2PDF.pdf', 'F')

,其實思路和openpyxl類似,遍歷每一個單元格並寫入數據,只不過現在是往PDF文件中寫入。

PPT轉PDF

本節介紹一下PPT如何轉換為PDF,但是我搜了一大圈都沒有MAC用戶可以實現的方法,所以只能針對Windows去操作,使用到的就是在word2pdf中講到的comtypes

  1.  
    import sys
  2.  
    import os
  3.  
    import comtypes.client
  4.  
    #設置路徑
  5.  
    input_file_path = sys.argv[ 1]
  6.  
    output_file_path = sys.argv[ 2]
  7.  
    input_file_path = os.path.abspath(input_file_path)
  8.  
    output_file_path = os.path.abspath(output_file_path)
  9.  
    #創建PDF
  10.  
    powerpoint = comtypes.client. CreateObject( "Powerpoint.Application")
  11.  
    powerpoint. Visible =  1
  12.  
    slides = powerpoint. Presentations. Open(input_file_path)
  13.  
    #保存PDF
  14.  
    slides. SaveAs(output_file_path,  32)
  15.  
    slides. Close()

相關參數與細節可以查閱comtypes官方文檔,因為我是mac所以沒有過多研究,在成功轉換之后就可以和我們之前的批量操作與合並進行結合實現自動化了!

md轉pdf

關於markdown轉pdf,幾乎所有markdown編輯器都支持導出為pdf格式,本以為這個需求並不高,但是研究了一圈發現很多老外造了很多md轉pdf的輪子,比如md2pdf、markdown2pdf、md2pdf-client等。因為大多數博客使用的是markdown格式,使用這些庫可以很好的將博客文章批量轉換為PDF文檔存儲。

 

早起都試了一圈,找到一個語法最簡單的markdown2pdf3,直接pip安裝即可,使用兩行代碼即可將一個md文件轉換為pdf

  1.  
    from markdown2pdf3  import *
  2.  
    convert_markdown_to_pdf( 'test.md'#你的markdown文件路徑

但是要注意的是如果有中文,還需要進行一些額外的設置,可以查閱官方文檔,不過現在就能和之前講的Word轉PDF結合,批量轉換指定路徑下的全部markdown文件為pdf,比如可以使用下面的代碼找到當前文件夾下的全部md文件

  1.  
    import os
  2.  
    import glob
  3.  
    from pathlib  import Path
  4.  
     
  5.  
    path = os.getcwd() + '/'
  6.  
    p =  Path(path) #初始化構造 Path對象
  7.  
    FileList=list(p.glob( "**/*.md")) 

html轉pdf

關於html也就是網頁轉為PDF是來問我最多的問題,其實很簡單,之前在Selenium爬取公眾號全部文章這篇文章中就提到使用PDFKIT即可,但是並不是直接pip安裝pdfkit就行,我們需要提前進入下面的網站選擇自己電腦系統對應的wkhtmltopdf下載安裝

https://wkhtmltopdf.org/downloads.html

安裝完使用pip安裝pdfkit

pip install pdfkit

現在我們就能使用兩行代碼轉換指定網頁為PDF格式,比如將我的第一篇自動化文章轉為PDF

 

看起來效果還是非常好的,所有格式包括代碼都完整的保存了下來,接下來怎么做就不用我多說了,比如你想下載一個公眾號所有文章為PDF格式,那就先將歷史文章URL提取出來,接着使用pdfkit轉換即可,而這兩步驟我們都已經詳細講解過了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM