日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python处理pdf文件

發布時間:2023/12/8 python 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python处理pdf文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

對pdf文件的常見操作需求包括讀取pdf中的文字圖表,新建或截取pdf,pdf與其他格式的轉換等。通過代碼可更靈活的實現各種功能需求。在眾多可處理pdf的包中選擇PyMuPDF進行介紹。PyMuPDF是MuPDF的python接口,可處理 的文件格式后綴包括 pdf,xps,oxps,cbz,fb2, epub。另外也可處理10余種常見圖片格式,包括:png,jpg,bmp,tiff等。

具體功能

  • 搜索文本
  • 提取文本和圖片
  • 轉換格式為 html,xml,json,txt
  • 結合Tesseract使用,可對圖片進行OCR 文本提取
  • 可作為圖片轉換器,將讀入的文件轉換為PNG,PNM,PAM或 Photoshop文件,同時也可以與PIL/Pillow結合使用進行圖片操作
  • 對于pdf文件,可進行文件和頁面的創建,合并和拆分。同時頁面可進行插入,刪除,替換或重新排列等操作
  • 可將pdf重新格式化,以使其能夠雙面打印,色調分離,添加logo或水印等
  • 支持加密,解密,權限設置等密碼保護措施

安裝

pip install pymupdf 或 PyMuPDF
由于歷史原因,導入PyMuPDF 包的語句為:
import fitz

常用操作

以下以 1.18.17 版本為例介紹。

  • 讀取pdf文件

    可直接打開支持的文件類型,輸入文件名即可。也可以打開已經由其他工具讀取的文件流。打開后,可對其中的頁面進行操作。

  • doc = fitz.open(filename) # 先從zip壓縮文件讀取,再使用fitz打開 doc = fitz.open(stream=zfile.read(pdf), filetype="pdf") # 獲取pdf中頁面 first_page = doc.load_page(0) # 或直接遍歷 for page in doc:# do something
  • 提取pdf中全部文本或搜索文本

    遍歷所有頁面,獲取文本。搜索文本只能在單個頁面上進行,可通過遍歷獲取全部結果。

  • texts = "" with fitz.open(path) as doc:for page in doc:# 提取文字texts += page.getText() # 現更改為 page.get_text()# 在當前頁面上搜索指定內容rect = page.search_for("keyward") # 或直接在doc水平,加載指定頁面進行搜索doc.search_page_for(page_num,"keyward")
  • 圖片操作
    • 讀取各種格式的圖片

      可讀取普通格式,二進制文件流或base64格式的圖片。

    if type == "byte":img = fitz.open(stream=f, filetype=filetype) elif type == "base64":img = fitz.open(stream=io.BytesIO(base64.b64decode(f)), filetype=filetype) else:img = fitz.open(f)
    • 提取頁面中的圖片

      首先需要獲取xref (cross-reference number)。xref是交叉引用編號,這是pdf中對象的整數唯一標識。每個pdf都存在一個交叉引用表(物理上可能有幾個單獨的部分組成)。它存儲每個對象的相對位置,以便快速查找。其中item 0是保留項,不會以任何方式使用。 許多PyMuPDF類有一個xref屬性(非PDF為0),可以獲得pdf中對象的總數 :Document.xref_length() - 1 。有兩種方式獲取xref,得到xref后又有兩種方式提取圖片,如下:

    #獲取單個頁面上圖片的xref Page.get_images() # 得到pdf的xref數目后全部遍歷,找到需要的圖片對應的xref doc.extract_image(xref) # 2種方式提取圖片 pix = fitz.Pixmap(doc, xref) img = doc.extract_image(xref)

    其中Page.get_images()的返回內容為包含多個信息的list,內容為(xref, smask, width, height, bpc, colorspace, alt.colorspace, name, filter, referencer)。

    • 頁面轉換為圖片
    pix = page.get_pixmap() # render page to an image pix.save("page-%i.png" % page.number) # 保存圖片
    • 增加圖片分辨率
    zoom_x = 2 # 放大2倍 zoom_y = 2 rotate = int(0) mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate) pix = page.getPixmap(matrix=mat, alpha=False)
  • 截取pdf中部分頁面生成新的pdf
  • pdfDoc = fitz.open(pdf_path) pageNum = pdfDoc.pageCount pdfDoc.select([i for i in range(pageNum -5, pageNum )]) # 選擇最后5頁進行保存 pdfDoc.save(new_pdf_path, garbage=3) # 保存為新的pdf pdfDoc.close()
  • 合并多個圖片創建為新的pdf文件
  • doc = fitz.open() for i, f in enumerate(images):img = fitz.open(f)rect = img[0].rect # pic dimensionpdfbytes = img.convert_to_pdf() # 圖片轉換為pdf字節img.close() # no longer neededimgPDF = fitz.open("pdf", pdfbytes) # open stream as PDFpage = doc.new_page(width=rect.width, height=rect.height) # pic dimensionpage.show_pdf_page(rect, imgPDF, 0) # 將圖片轉換后的pdf對象填充到頁面 doc.save(outfile)

    總結

    PyMuPDF中有一些最常用的類,也是pdf各種核心操作的對象,其屬性值可提供各種信息,上述各種操作需求也是基于對象方法的使用,僅僅是一些常見需求。更多功能操作或需求,以及全部類更詳細的屬性方法可參考官方文檔。常用的有以下幾種:

  • Document
    打開一個文件即實例化了一個Document,可通過讀取文件或內存獲得。部分方法如下:

  • Page
    document中的每個頁面是Page類。

  • Pixmap
    Pixmap是MuPDF渲染能力的核心對象,表示平面像素集。PyMuPDF中有多種方法創建 pixmap,比如 從頁面或pdf中圖片直接創建,主要用來進行與圖片相關的各種操作,比如圖片格式轉換,縮放,裁剪等。

  • 總結

    以上是生活随笔為你收集整理的python处理pdf文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。