Python PyMuPDF實(shí)現(xiàn)PDF與圖片和PPT相互轉(zhuǎn)換
文章目錄 安裝與簡介MuPDFPyMuPDF PyMuPDF使用元數(shù)據(jù)頁面Page 代碼示例PDF轉(zhuǎn)圖片圖片轉(zhuǎn)PDFPDF轉(zhuǎn)PPT
PyMuPDF提供了PDF及流行圖片處理接口。
安裝與簡介
安裝:pip install PyMuPDF
PyMuPDF使用手冊(cè)參見https://pymupdf.readthedocs.io/en/latest/index.html
MuPDF
MuPDF是一個(gè)輕量級(jí)的PDF、XPS和電子書查看器。MuPDF由軟件庫、命令行工具和各種平臺(tái)的查看器組成:
- 支持多種文檔格式:如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2;
- 命令行工具可注釋、編輯文檔,并將文檔轉(zhuǎn)換為其他格式:如HTML、SVG、PDF和CBZ。
PyMuPDF
PyMuPDF是MuPDF的Python接口庫:
- 可訪問擴(kuò)展名為“.pdf”、“.xps”、“.oxps”、“.cbz”、“.fb2”或“.epub”的文檔;
- 可像文檔樣處理流行圖像格式:“.png”,“.jpg”,“.bmp”,“.tiff”等
對(duì)于所有支持的文檔類型可以:
解密文件
訪問元信息、鏈接和書簽
以柵格格式(PNG和其他格式)或矢量格式SVG呈現(xiàn)頁面
搜索文本
提取文本和圖像
轉(zhuǎn)換為其他格式:PDF, (X)HTML, XML, JSON, text
對(duì)于PDF文檔,存在大量的附加功能,可以:創(chuàng)建、合并或拆分。頁面可以通過多種方式插入、刪除、重新排列或修改(包括注釋和表單字段)。
可以提取或插入圖像和字體
完全支持嵌入式文件
pdf文件可以重新格式化,以支持雙面打印,色調(diào)分離,應(yīng)用標(biāo)志或水印
完全支持密碼保護(hù):解密、加密、加密方法選擇、權(quán)限級(jí)別和用戶/所有者密碼設(shè)置
支持圖像、文本和繪圖的PDF可選內(nèi)容概念
可以訪問和修改低級(jí)PDF結(jié)構(gòu)
PyMuPDF使用
通過open可打開文檔(Document對(duì)象):
import fitz
doc = fitz.open(filename)
# ...
doc.save('file')
doc.close()
Document中發(fā)主要方法與屬性:
| 方法/屬性 | 描述 |
|---|---|
| Document.page_count | 頁數(shù) (int) |
| Document.metadata | 元數(shù)據(jù) (dict) |
| Document.get_toc() | 獲取目錄 (list) |
| Document.load_page() | 讀取頁面 |
對(duì)于PDF文檔,有以下頁面操作方法:
- 刪除頁面:Document.delete_page()和Document.delete_pages()
- 復(fù)制或移動(dòng)頁面:Document.copy_page()、Document.fullcopy_page()和Document.move_page()
- 選擇頁面(只保留選擇范圍內(nèi)的頁面):Document.select()
- 插入新頁:Document.insert_page()和Document.new_page(),以及Document.insert_pdf()
元數(shù)據(jù)
Document.metadata是一個(gè)具有以下鍵的Python字典。
| Key | Value |
|---|---|
| producer | producer (producing software) |
| format | format: ‘PDF-1.4’, ‘EPUB’, etc. |
| encryption | encryption method used if any |
| author | 作者 |
| modDate | 最后修改日期 |
| keywords | 關(guān)鍵字 |
| title | 標(biāo)題 |
| creationDate | 創(chuàng)建日期 |
| creator | creating application |
| subject | subject |
頁面Page
頁面是MuPDF的核心:
• 可以將頁面呈現(xiàn)為光柵或矢量(SVG)圖像,可以選擇縮放、旋轉(zhuǎn)、移動(dòng)或剪切頁面。
• 可以提取多種格式的頁面文本和圖像,并搜索文本字符串。
• 對(duì)于PDF文檔,可以使用更多的方法向頁面添加文本或圖像。
從Document中獲取頁面,頁面索引:
第一頁為0;
負(fù)數(shù)表示從末尾倒數(shù):如doc[-1]表示獲取最后一頁;
# pno是頁面索引 page = doc.load_page(pno) # or page = doc[pno]
頁面操作方法:
page.get_links():獲取頁面中的連接(返回字典);
page.annots():獲取注釋;
page.widgets():獲取表單;
pix = page.get_pixmap():獲取光柵圖像(整個(gè)頁面作為一個(gè)圖像);
pix.save('page.jpg'):保存為圖像;
page.get_svg_image():獲取矢量圖像;
page.get_text(opt):獲取文本,opt可為:
- “text”:(默認(rèn))帶換行符的純文本(無格式、無文字位置詳細(xì)信息、無圖像);
- “blocks”:生成文本塊(段落)的列表;
- “words”:生成單詞列表(不包含空格的字符串);
- “html”:創(chuàng)建頁面的完整視覺版本,包括任何圖像;
- “dict”/“json”:與HTML相同的信息級(jí)別,但作為Python字典或JSON字符串。
- “rawdict”/“rawjson”:“dict”/"json"的超級(jí)集合。它還提供諸如XML之類的字符詳細(xì)信息。
- “xhtml”:文本信息級(jí)別與文本版本相同,但包含圖像。
- “xml”:不包含圖像,但包含每個(gè)文本字符的完整位置和字體信息,使用XML模塊進(jìn)行解釋。
page.search_for("txt"):搜索文本
代碼示例
PDF轉(zhuǎn)圖片
通過get_pixmap獲取每頁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
把圖片插入到新建頁中(插入位置使用頁面框,即填充整個(gè)頁面)
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)前頁插入文檔
doc.save(pdfFile)
print(f"PDF save to {pdfFile}")
doc.close()
PDF轉(zhuǎn)PPT
轉(zhuǎn)PPT時(shí)需要用到pptx庫:pip install python-pptx
使用文檔:https://python-pptx.readthedocs.io/en/latest/index.html
先把PDF轉(zhuǎn)為圖片,然后把每張圖片生成一個(gè)幻燈片頁面(PPT頁面大小有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頁面樣式
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)文章
Django web自定義通用權(quán)限控制實(shí)現(xiàn)方法
這篇文章主要介紹了Django web自定義通用權(quán)限控制實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Python sql注入 過濾字符串的非法字符實(shí)例
這篇文章主要介紹了Python sql注入 過濾字符串的非法字符實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python eval 轉(zhuǎn)換k m到乘法計(jì)算的操作
這篇文章主要介紹了python eval 轉(zhuǎn)換k m到乘法計(jì)算的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
python中sklearn的pipeline模塊實(shí)例詳解
這篇文章主要介紹了python中sklearn的pipeline模塊的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
詳解DBSCAN算法原理及其Python實(shí)現(xiàn)
DBSCAN,即Density-Based Spatial Clustering of Applications with Noise,基于密度的噪聲應(yīng)用空間聚類,本文將詳細(xì)介紹DBSCAN算法的原理及其Python實(shí)現(xiàn),需要的可以參考下2023-12-12
Python3 實(shí)現(xiàn)將bytes圖片轉(zhuǎn)jpg格式
這篇文章主要介紹了Python3 實(shí)現(xiàn)將bytes圖片轉(zhuǎn)jpg格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python使用Scapy實(shí)現(xiàn)構(gòu)造特殊數(shù)據(jù)包
Scapy是一款Python庫,可用于構(gòu)建、發(fā)送、接收和解析網(wǎng)絡(luò)數(shù)據(jù)包,這篇文章主要為大家詳細(xì)介紹了python如何使用Scapy構(gòu)造特殊數(shù)據(jù)包,有需要的可以參考下2023-11-11

