2017-09-28 1 views
0

Ich versuche, ein Skript zu schreiben, das einen benutzerdefinierten ppt öffnet, liest es und findet Bilddateinamen. Ich benutze das python pptx-Paket, da ich dadurch ppt-Dateien öffnen kann. Ich versuche, durch jede Folie zu gehen und diese Folie für Bilder zu überprüfen, aber ich habe keine Ahnung, wie man das mit dem pptx-Paket macht und die Dokumentation ist nicht wirklich klar auf diesem Imo.Erhalte Bilddateinamen mit Python pptx

So nach ein wenig mehr zu graben in die Dokumentation habe ich festgestellt, dass diese Art die Arbeit erledigt:

file = open(fileName, 'rb') 
ppt = Presentation(file) 
images = [] 

for slide in ppt.slides: 
    for shape in slide.shapes: 
     print(shape.image) 
     if shape.image: 
      if isCorrectImageType(shape.image): 
       print(shape.image.filename) 
file.close() 

def isCorrectImageType(imageShape): 
    imgExtension = imageShape.content_type 
    filePattern = '(.jpg$|.jpeg$|.png$|.gif$)' 
    image = re.search(filePattern, imgExtension) 
    print(image.group(0)) 

    return image.group(0) 

Dies funktioniert jedoch tut es den richtigen Dateinamen zurück. Es gibt image.png zurück, während der Dateiname ist myfile.png

Antwort

0

Der Bilddateiname wird nur in der XML gespeichert, wenn das Bild aus einer Datei eingefügt wird. Wenn das Bild aus einem binären Stream importiert wird (durch ein Programm wie python-pptx), ist kein Dateiname verfügbar und daher wird stattdessen das Formular image.{ext} verwendet. Dies ist auch der Fall, wenn ein Bild mithilfe von PowerPoint eingefügt wird.

So ist der Dateiname nicht unbedingt immer verfügbar.

Wenn es jedoch hat aufgezeichnet wurde, ist es in der descr Attribut der Bildform zur Verfügung:

from pptx.enum.shapes import MSO_SHAPE_TYPE 

for shape in slide.shapes: 
    if shape.shape_type != MSO_SHAPE_TYPE.PICTURE: 
     continue 
    picture = shape 
    print(picture._pic.nvPicPr.cNvPr.get('descr')) 

Dieser Code greift auf die XML, die wie folgt aussieht:

<p:pic> 
    <p:nvPicPr> 
    <p:cNvPr id="6" name="Picture 5" descr="python-logo.gif"/> 
    <p:cNvPicPr/> 
    <p:nvPr/> 
    </p:nvPicPr> 
    ... 

und sollte den Wert zurückgeben.

Verwandte Themen