欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python PyMuPDF實(shí)現(xiàn)PDF與圖片和PPT相互轉(zhuǎn)換

 更新時(shí)間:2022年12月23日 10:20:19   作者:alwaysrun  
能夠用來(lái)對(duì)PDF文檔進(jìn)行操作的Python包有好幾個(gè),如提取內(nèi)容的PdfPlumber、PDFMiner,可以用來(lái)對(duì)PDF文件進(jìn)行修改操作的PyPDF2等等,如果只是需要簡(jiǎn)單地對(duì)PDF文件實(shí)現(xiàn)合并、拆分、書(shū)簽操作,使用PyPDF2就足以滿足。但如果想對(duì)PDF文件進(jìn)行一些底層操作,基本上只有PyMuPDF了

文章目錄 安裝與簡(jiǎn)介MuPDFPyMuPDF PyMuPDF使用元數(shù)據(jù)頁(yè)面Page 代碼示例PDF轉(zhuǎn)圖片圖片轉(zhuǎn)PDFPDF轉(zhuǎn)PPT

PyMuPDF提供了PDF及流行圖片處理接口。

安裝與簡(jiǎn)介

安裝:pip install PyMuPDF

PyMuPDF使用手冊(cè)參見(jiàn)https://pymupdf.readthedocs.io/en/latest/index.html

MuPDF

MuPDF是一個(gè)輕量級(jí)的PDF、XPS和電子書(shū)查看器。MuPDF由軟件庫(kù)、命令行工具和各種平臺(tái)的查看器組成:

  • 支持多種文檔格式:如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2;
  • 命令行工具可注釋、編輯文檔,并將文檔轉(zhuǎn)換為其他格式:如HTML、SVG、PDF和CBZ。

PyMuPDF

PyMuPDF是MuPDF的Python接口庫(kù):

  • 可訪問(wèn)擴(kuò)展名為“.pdf”、“.xps”、“.oxps”、“.cbz”、“.fb2”或“.epub”的文檔;
  • 可像文檔樣處理流行圖像格式:“.png”,“.jpg”,“.bmp”,“.tiff”等

對(duì)于所有支持的文檔類(lèi)型可以:

解密文件

訪問(wèn)元信息、鏈接和書(shū)簽

以柵格格式(PNG和其他格式)或矢量格式SVG呈現(xiàn)頁(yè)面

搜索文本

提取文本和圖像

轉(zhuǎn)換為其他格式:PDF, (X)HTML, XML, JSON, text

對(duì)于PDF文檔,存在大量的附加功能,可以:創(chuàng)建、合并或拆分。頁(yè)面可以通過(guò)多種方式插入、刪除、重新排列或修改(包括注釋和表單字段)。

可以提取或插入圖像和字體

完全支持嵌入式文件

pdf文件可以重新格式化,以支持雙面打印,色調(diào)分離,應(yīng)用標(biāo)志或水印

完全支持密碼保護(hù):解密、加密、加密方法選擇、權(quán)限級(jí)別和用戶/所有者密碼設(shè)置

支持圖像、文本和繪圖的PDF可選內(nèi)容概念

可以訪問(wèn)和修改低級(jí)PDF結(jié)構(gòu)

PyMuPDF使用

通過(guò)open可打開(kāi)文檔(Document對(duì)象):

import fitz
doc = fitz.open(filename)
# ...
doc.save('file')
doc.close()

Document中發(fā)主要方法與屬性:

方法/屬性描述
Document.page_count頁(yè)數(shù) (int)
Document.metadata元數(shù)據(jù) (dict)
Document.get_toc()獲取目錄 (list)
Document.load_page()讀取頁(yè)面

對(duì)于PDF文檔,有以下頁(yè)面操作方法:

  • 刪除頁(yè)面:Document.delete_page()和Document.delete_pages()
  • 復(fù)制或移動(dòng)頁(yè)面:Document.copy_page()、Document.fullcopy_page()和Document.move_page()
  • 選擇頁(yè)面(只保留選擇范圍內(nèi)的頁(yè)面):Document.select()
  • 插入新頁(yè):Document.insert_page()和Document.new_page(),以及Document.insert_pdf()

元數(shù)據(jù)

Document.metadata是一個(gè)具有以下鍵的Python字典。

KeyValue
producerproducer (producing software)
formatformat: ‘PDF-1.4’, ‘EPUB’, etc.
encryptionencryption method used if any
author作者
modDate最后修改日期
keywords關(guān)鍵字
title標(biāo)題
creationDate創(chuàng)建日期
creatorcreating application
subjectsubject

頁(yè)面Page

頁(yè)面是MuPDF的核心:

• 可以將頁(yè)面呈現(xiàn)為光柵或矢量(SVG)圖像,可以選擇縮放、旋轉(zhuǎn)、移動(dòng)或剪切頁(yè)面。

• 可以提取多種格式的頁(yè)面文本和圖像,并搜索文本字符串。

• 對(duì)于PDF文檔,可以使用更多的方法向頁(yè)面添加文本或圖像。

從Document中獲取頁(yè)面,頁(yè)面索引:

第一頁(yè)為0;

負(fù)數(shù)表示從末尾倒數(shù):如doc[-1]表示獲取最后一頁(yè);

# pno是頁(yè)面索引
page = doc.load_page(pno) 
# or
page = doc[pno]

頁(yè)面操作方法:

page.get_links():獲取頁(yè)面中的連接(返回字典);

page.annots():獲取注釋?zhuān)?/p>

page.widgets():獲取表單;

pix = page.get_pixmap():獲取光柵圖像(整個(gè)頁(yè)面作為一個(gè)圖像);

pix.save('page.jpg'):保存為圖像;

page.get_svg_image():獲取矢量圖像;

page.get_text(opt):獲取文本,opt可為:

  • “text”:(默認(rèn))帶換行符的純文本(無(wú)格式、無(wú)文字位置詳細(xì)信息、無(wú)圖像);
  • “blocks”:生成文本塊(段落)的列表;
  • “words”:生成單詞列表(不包含空格的字符串);
  • “html”:創(chuàng)建頁(yè)面的完整視覺(jué)版本,包括任何圖像;
  • “dict”/“json”:與HTML相同的信息級(jí)別,但作為Python字典或JSON字符串。
  • “rawdict”/“rawjson”:“dict”/"json"的超級(jí)集合。它還提供諸如XML之類(lèi)的字符詳細(xì)信息。
  • “xhtml”:文本信息級(jí)別與文本版本相同,但包含圖像。
  • “xml”:不包含圖像,但包含每個(gè)文本字符的完整位置和字體信息,使用XML模塊進(jìn)行解釋。

page.search_for("txt"):搜索文本

代碼示例

PDF轉(zhuǎn)圖片

通過(guò)get_pixmap獲取每頁(yè)P(yáng)DF為圖片,然后保存即可。其中zoom用于控制生成圖片的縮放比例。

import fitz
def pdf2image(pdfFile, storePath, zoom=2.0):
    doc = fitz.open(pdfFile)
    picName = os.path.splitext(os.path.basename(pdfFile))[0]
    index = 0
    os.makedirs(storePath, exist_ok=True)
    images = []
    print(f"To convert: {pdfFile}")
    for pg in range(doc.page_count):
        page = doc[pg]
        index += 1
        rotate = int(0)
        print(f"\tconvert page {index}")
        # 每個(gè)尺寸的縮放系數(shù)(提高生成分辨率)
        zoom_x, zoom_y = zoom, zoom
        mat = fitz.Matrix(zoom_x, zoom_y)
        pm = page.get_pixmap(matrix=mat, alpha=False)
        imgName = '{}-{}.jpg'.format(picName, index)
        imgFile = os.path.join(storePath, imgName)
        pm.save(imgFile)
        images.append(imgFile)
    doc.close()
    return images

圖片轉(zhuǎn)PDF

把圖片插入到新建頁(yè)中(插入位置使用頁(yè)面框,即填充整個(gè)頁(yè)面)

def image2pdf(imgDir, pdfFile, width=595, height=842):
    doc = fitz.open()
    print("To convert image to PDF:")
    for img in sorted(glob.glob("{}/*".format(imgDir))):
        print(f"\tAdd image {img}")
        page = doc.new_page(width=width, height=height)
        page.insert_image(page.rect, filename=img)  # 將當(dāng)前頁(yè)插入文檔
    doc.save(pdfFile)
    print(f"PDF save to {pdfFile}")
    doc.close()

PDF轉(zhuǎn)PPT

轉(zhuǎn)PPT時(shí)需要用到pptx庫(kù):pip install python-pptx

使用文檔:https://python-pptx.readthedocs.io/en/latest/index.html

先把PDF轉(zhuǎn)為圖片,然后把每張圖片生成一個(gè)幻燈片頁(yè)面(PPT頁(yè)面大小有width與height控制)

import fitz
import pptx
from pptx.util import Inches
def pdf2pptx(pdfFile, pptFile, imgPath, width=10, height=7.5, zoom=2.0):
    images = pdf2image(pdfFile, imgPath, zoom)
    ppt = pptx.Presentation()
    for i in images:
        layout = ppt.slide_layouts[0]  # 定義一個(gè)PPT頁(yè)面樣式
        slide = ppt.slides.add_slide(layout)
        slide.shapes.add_picture(
            image_file=i,
            left=Inches(0),
            top=Inches(0),
            width=Inches(width),
            height=Inches(height)
        )
    ppt.save(pptFile)
    shutil.rmtree(imgPath)

到此這篇關(guān)于Python PyMuPDF實(shí)現(xiàn)PDF與圖片和PPT相互轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Python PyMuPDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 求10個(gè)數(shù)的平均數(shù)實(shí)例

    python 求10個(gè)數(shù)的平均數(shù)實(shí)例

    今天小編就為大家分享一篇python 求10個(gè)數(shù)的平均數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • pycharm安裝中文插件的2種方法圖文詳解

    pycharm安裝中文插件的2種方法圖文詳解

    PyCharm可以說(shuō)是當(dāng)今最流行的一款Python?IDE了,下面這篇文章主要給大家介紹了關(guān)于pycharm安裝中文插件的2種方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • python判斷變量是否為int、字符串、列表、元組、字典的方法詳解

    python判斷變量是否為int、字符串、列表、元組、字典的方法詳解

    這篇文章主要介紹了python判斷變量是否為int、字符串、列表、元組、字典的方法詳解,需要的朋友可以參考下
    2020-02-02
  • caffe的python接口生成solver文件詳解學(xué)習(xí)

    caffe的python接口生成solver文件詳解學(xué)習(xí)

    這篇文章主要為大家介紹了caffe的python接口生成solver文件詳解學(xué)習(xí)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python合并ts文件至mp4格式及解密教程詳解

    Python合并ts文件至mp4格式及解密教程詳解

    m3u8準(zhǔn)確來(lái)說(shuō)是一種索引文件,使用m3u8文件實(shí)際上是通過(guò)它來(lái)解析對(duì)應(yīng)的放在服務(wù)器上的視頻網(wǎng)絡(luò)地址,從而實(shí)現(xiàn)在線播放。本文給大家介紹Python合并ts文件至mp4格式及解密教程,需要的朋友參考下吧
    2021-07-07
  • Python中字典與恒等運(yùn)算符的用法分析

    Python中字典與恒等運(yùn)算符的用法分析

    這篇文章主要介紹了Python中字典與恒等運(yùn)算符的用法,結(jié)合實(shí)例形式分析了Python中字典與恒等運(yùn)算符功能、常見(jiàn)用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • Python3.x中自定義比較函數(shù)

    Python3.x中自定義比較函數(shù)

    這篇文章主要介紹了Python3.x中自定義比較函數(shù),本文給出了自定義對(duì)象的比較、字典值value的比較實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-04-04
  • 手把手教你YOLOv5如何進(jìn)行區(qū)域目標(biāo)檢測(cè)

    手把手教你YOLOv5如何進(jìn)行區(qū)域目標(biāo)檢測(cè)

    YOLOV5和YOLOV4有很多相同的地方,最大的改變還是基礎(chǔ)架構(gòu)的變化,下面這篇文章主要給大家介紹了關(guān)于YOLOv5如何進(jìn)行區(qū)域目標(biāo)檢測(cè)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • python使用pandas按照行數(shù)分割表格

    python使用pandas按照行數(shù)分割表格

    本文主要介紹了python使用pandas按照行數(shù)分割表格,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python神奇的內(nèi)置函數(shù)locals的實(shí)例講解

    Python神奇的內(nèi)置函數(shù)locals的實(shí)例講解

    今天小編就為大家分享一篇關(guān)于Python神奇的內(nèi)置函數(shù)locals的實(shí)例講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02

最新評(píng)論