簡體   English   中英

使用pymupdf按正確順序提取pdf圖像

[英]Extract images of pdf with pymupdf in right order

我目前正在開發用於 pdf 文件的 Python 3.x 圖像提取器,似乎無法找到解決我在整個工作中遇到的問題的方法。 我的目的是提取 pdf 文件(車輛報告)的所有圖像,而沒有提供這些文件的公司的徽標。 到目前為止,我有一個使用 fitz 的工作代碼,它可以找到圖像並存儲它們(我在互聯網上找到了這段代碼)。 不幸的是,它們以錯誤的順序返回。 為了用標題注釋圖片,它們必須按照它們在 pdf 中的顯示順序進行保存。

我已經嘗試通過按升序使用外部參照字符串(在 pdf 中定義對象的字符串)中定義的對象名稱來正確地做到這一點。 在那個版本之前,我通過一個 dict 用計數器注釋圖片(我知道它是未排序的,但通過對鍵進行排序來修復它),但是大約有 2-4 個未排序的大約 30 張圖像。 此外,這段代碼對我來說似乎不是一個好的解決方案,因為我通過注釋計數器來“偽造”圖像編號。

我當前的版本(外部參照名稱):

import fitz
import sys
import re

checkXO = r"/Type(?= */XObject)"       # finds "/Type/XObject"   
checkIM = r"/Subtype(?= */Image)"      # finds "/Subtype/Image"
doc = fitz.open(fr"{pdfpath}")

lenXREF = doc._getXrefLength()         # number of objects 
pixmaps = {}
imgcount=0
count=0
imglist=[]
for i in range(1, lenXREF):            # scan through all objects
    text = doc._getXrefString(i)     # string defining the object

    isXObject = re.search(checkXO, text)    # tests for XObject
    isImage   = re.search(checkIM, text)    # tests for Image
    if not isXObject or not isImage:   # not an image object if not both True
        continue
    count+=1
    pix = fitz.Pixmap(doc, i)          # make pixmap from image
    if re.search(r'Name \WIm(\d+)',text) != None:
        imglist.append(re.search(r'Name \W(Im\d+)',text).group(1))
        pixmaps[re.search(r'Name \W(Im\d+)',text).group(1)]=pix
    if re.search(r'Name \W(Im\d+)',text) == None:
        imglist.append(count)
        pixmaps[count]=pix
imglist1=[]
for i in range(1,doc.pageCount):
    if len(doc.getPageImageList(i))>1:
        for entry in doc.getPageImageList(i):
            imglist1.append(entry[7])
        break
for entry in imglist1:    
    pixmaps[entry].writeImage(fr"{dirpath}\%s.jpg" % (imgcount),'jpg')        
    imgcount+=1  

也可以隨意建議一種全新的方法來處理此任務。 在此先感謝您的幫助。

回購維護者的回答:

在較新的 PyMuPDF 版本(最好使用 v1.17.0)中,您可以獲得圖像在頁面上的位置。 當您談到“正確的奧德”時,這似乎是您的意圖: rect = page.getImageBbox(name) ,其中 name 是您上面的entry[7]

對圖像列表使用 sorted()。 如果您可以使用不同的版本,請參閱https://stackoverflow.com/a/68267356/7240889

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM