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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Python PyMuPDF如何实现PDF与图片和PPT相互转换

發布時間:2023/12/19 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 Python PyMuPDF如何实现PDF与图片和PPT相互转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要介紹了PythonPyMuPDF如何實現PDF與圖片和PPT相互轉換的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇PythonPyMuPDF如何實現PDF與圖片和PPT相互轉換文章都會有所收獲,下面我們一起來看看吧。

安裝與簡介

安裝:pip install PyMuPDF

MuPDF

MuPDF是一個輕量級的PDF、XPS和電子書查看器。MuPDF由軟件庫、命令行工具和各種平臺的查看器組成:

  • 支持多種文檔格式:如PDF、XPS、OpenXPS、CBZ、EPUB和FictionBook 2。

  • 命令行工具可注釋、編輯文檔,并將文檔轉換為其他格式:如HTML、SVG、PDF和CBZ。

PyMuPDF

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結構

PyMuPDF使用

通過open可打開文檔(Document對象):

importfitz
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

頁面Page

頁面是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"):搜索文本

代碼示例

PDF轉圖片

通過get_pixmap獲取每頁PDF為圖片,然后保存即可。其中zoom用于控制生成圖片的縮放比例。

importfitz
defpdf2image(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"Toconvert:{pdfFile}")
forpginrange(doc.page_count):
page=doc[pg]
index+=1
rotate=int(0)
print(f"\tconvertpage{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()
returnimages

圖片轉PDF

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

defimage2pdf(imgDir,pdfFile,width=595,height=842):
doc=fitz.open()
print("ToconvertimagetoPDF:")
forimginsorted(glob.glob("{}/*".format(imgDir))):
print(f"\tAddimage{img}")
page=doc.new_page(width=width,height=height)
page.insert_image(page.rect,filename=img)#將當前頁插入文檔
doc.save(pdfFile)
print(f"PDFsaveto{pdfFile}")
doc.close()

PDF轉PPT

轉PPT時需要用到pptx庫:pip install python-pptx

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

importfitz
importpptx
frompptx.utilimportInches
defpdf2pptx(pdfFile,pptFile,imgPath,width=10,height=7.5,zoom=2.0):
images=pdf2image(pdfFile,imgPath,zoom)
ppt=pptx.Presentation()
foriinimages:
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相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。

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