您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python PyMuPDF如何實現PDF與圖片和PPT相互轉換的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python PyMuPDF如何實現PDF與圖片和PPT相互轉換文章都會有所收獲,下面我們一起來看看吧。
安裝:pip install PyMuPDF
MuPDF是一個輕量級的PDF、XPS和電子書查看器。MuPDF由軟件庫、命令行工具和各種平臺的查看器組成:
支持多種文檔格式:如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2。
命令行工具可注釋、編輯文檔,并將文檔轉換為其他格式:如HTML、SVG、PDF和CBZ。
PyMuPDF是MuPDF的Python接口庫:
可訪問擴展名為“.pdf”、“.xps”、“.oxps”、“.cbz”、“.fb2”或“.epub”的文檔;
可像文檔樣處理流行圖像格式:“.png”,“.jpg”,“.bmp”,“.tiff”等
對于所有支持的文檔類型可以:
解密文件
訪問元信息、鏈接和書簽
以柵格格式(PNG和其他格式)或矢量格式SVG呈現頁面
搜索文本
提取文本和圖像
轉換為其他格式:PDF, (X)HTML, XML, JSON, text
對于PDF文檔,存在大量的附加功能,可以:創建、合并或拆分。頁面可以通過多種方式插入、刪除、重新排列或修改(包括注釋和表單字段)。
可以提取或插入圖像和字體
完全支持嵌入式文件
pdf文件可以重新格式化,以支持雙面打印,色調分離,應用標志或水印
完全支持密碼保護:解密、加密、加密方法選擇、權限級別和用戶/所有者密碼設置
支持圖像、文本和繪圖的PDF可選內容概念
可以訪問和修改低級PDF結構
通過open可打開文檔(Document對象):
import fitz doc = fitz.open(filename) # ... doc.save('file') doc.close()
Document中發主要方法與屬性:
方法/屬性 | 描述 |
---|---|
Document.page_count | 頁數 (int) |
Document.metadata | 元數據 (dict) |
Document.get_toc() | 獲取目錄 (list) |
Document.load_page() | 讀取頁面 |
對于PDF文檔,有以下頁面操作方法:
刪除頁面:Document.delete_page()和Document.delete_pages()
復制或移動頁面:Document.copy_page()、Document.fullcopy_page()和Document.move_page()
選擇頁面(只保留選擇范圍內的頁面):Document.select()
插入新頁:Document.insert_page()和Document.new_page(),以及Document.insert_pdf()
Document.metadata是一個具有以下鍵的Python字典。
Key | Value |
---|---|
producer | producer (producing software) |
format | format: ‘PDF-1.4’, ‘EPUB’, etc. |
encryption | encryption method used if any |
author | 作者 |
modDate | 最后修改日期 |
keywords | 關鍵字 |
title | 標題 |
creationDate | 創建日期 |
creator | creating application |
subject | subject |
頁面是MuPDF的核心:
• 可以將頁面呈現為光柵或矢量(SVG)圖像,可以選擇縮放、旋轉、移動或剪切頁面。
• 可以提取多種格式的頁面文本和圖像,并搜索文本字符串。
• 對于PDF文檔,可以使用更多的方法向頁面添加文本或圖像。
從Document中獲取頁面,頁面索引:
第一頁為0;
負數表示從末尾倒數:如doc[-1]表示獲取最后一頁;
# pno是頁面索引 page = doc.load_page(pno) # or page = doc[pno]
頁面操作方法:
page.get_links()
:獲取頁面中的連接(返回字典);
page.annots()
:獲取注釋;
page.widgets()
:獲取表單;
pix = page.get_pixmap()
:獲取光柵圖像(整個頁面作為一個圖像);
pix.save('page.jpg')
:保存為圖像;
page.get_svg_image()
:獲取矢量圖像;
page.get_text(opt)
:獲取文本,opt可為:
“text”:(默認)帶換行符的純文本(無格式、無文字位置詳細信息、無圖像);
“blocks”:生成文本塊(段落)的列表;
“words”:生成單詞列表(不包含空格的字符串);
“html”:創建頁面的完整視覺版本,包括任何圖像;
“dict”/“json”:與HTML相同的信息級別,但作為Python字典或JSON字符串。
“rawdict”/“rawjson”:“dict”/"json"的超級集合。它還提供諸如XML之類的字符詳細信息。
“xhtml”:文本信息級別與文本版本相同,但包含圖像。
“xml”:不包含圖像,但包含每個文本字符的完整位置和字體信息,使用XML模塊進行解釋。
page.search_for("txt")
:搜索文本
通過get_pixmap獲取每頁PDF為圖片,然后保存即可。其中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}") # 每個尺寸的縮放系數(提高生成分辨率) 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
把圖片插入到新建頁中(插入位置使用頁面框,即填充整個頁面)
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) # 將當前頁插入文檔 doc.save(pdfFile) print(f"PDF save to {pdfFile}") doc.close()
轉PPT時需要用到pptx庫:pip install python-pptx
先把PDF轉為圖片,然后把每張圖片生成一個幻燈片頁面(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] # 定義一個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)
關于“Python PyMuPDF如何實現PDF與圖片和PPT相互轉換”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Python PyMuPDF如何實現PDF與圖片和PPT相互轉換”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。