2017-09-28 7 views
0

私は指定されたユーザを開くスクリプトを作成しようとしています。これは、pptを読み込み、それを読み込んでイメージファイル名を見つけます。私は実際にpptファイルを開くことができますので、私はPythonのpptxパッケージを使用しています。私は各スライドを通過しようと画像のスライドを確認しようとしているが、私はpptxパッケージでこれを行う方法がわからないし、ドキュメントはこのimoでは本当に明確ではない。イメージファイル名をPythonで取得するpptx

だから、もう少しドキュメントに掘り後、私はこの種の仕事をしていることを発見しました:

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) 

これは、しかし、それは正しいファイル名を返すdoes notの作品。ファイル名がmyfile.pngである間にimage.pngを返します。

答えて

0

イメージファイルは、イメージがファイルから挿入された場合にのみXMLに格納されます。画像がバイナリストリームから(python-pptxのようなプログラムによって)インポートされた場合、利用可能なファイル名がないので、image.{ext}形式が代わりに使用されます。 PowerPointを使用して画像を貼り付ける場合も同様です。

したがって、ファイル名は常に利用可能なわけではありません。

それはが記録されている場合しかし、それは絵の形状のdescr属性で提供されています:

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')) 

このコードは次のようになりますXMLアクセス:

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

を値'python-logo.gif'を返す必要があります。

関連する問題