3

pptx ファイル内の画像から画像ファイル名を取得する必要があります。私はすでに画像からストリームを取得しましたが、画像ファイルの名前を取得していません...これが私のコードです:

private static Stream GetParagraphImage(DocumentFormat.OpenXml.Presentation.Picture     picture, DocumentFormat.OpenXml.Packaging.PresentationDocument presentation, ref     MyProject.Import.Office.PowerPoint.Presentation.Paragraph paragraph)
{
        // Getting the image id
        var imageId = picture.BlipFill.Blip.Embed.Value;
        // Getting the stream of the image
        var part = apresentacao.PresentationPart.GetPartById(idImagem);
        var stream = part.GetStream();
        // Getting the image name
        var imageName = GetImageName(imageId, presentation);  
/* Here i need a method that returns the image file name based on the id of the image and the presentation object.*/
        // Setting my custom object ImageName property
        paragraph.ImageName = imageName;
        // Returning the stream
        return stream;
}

誰も私がこれを達成する方法を知っていますか? ありがとう!!

4

1 に答える 1

1

実際、pptx ファイル内の画像/画像には 2 つのファイル名があります。

pptx ファイルに埋め込まれている画像のファイル名が必要な場合は、次の関数を使用できます。

public static string GetEmbeddedFileName(ImagePart part)
{
  return part.Uri.ToString();
}

イメージの元のファイル システム名が必要な場合は、次の関数を使用できます。

public static string GetOriginalFileSystemName(DocumentFormat.OpenXml.Presentation.Picture pic)
{
  return pic.NonVisualPictureProperties.NonVisualDrawingProperties.Description;
}

編集を開始:

完全なコード例を次に示します。

using (var doc = PresentationDocument.Open(fileName, false))
{
  var presentation = doc.PresentationPart.Presentation;

  foreach (SlideId slide_id in presentation.SlideIdList)
  {
    SlidePart slide_part = doc.PresentationPart.GetPartById(slide_id.RelationshipId) as SlidePart;
    if (slide_part == null || slide_part.Slide == null)
        continue;
    Slide slide = slide_part.Slide;

    foreach (var pic in slide.Descendants<DocumentFormat.OpenXml.Presentation.Picture>())
    {
      string id = pic.NonVisualPictureProperties.NonVisualDrawingProperties.Id;
      string desc = pic.NonVisualPictureProperties.NonVisualDrawingProperties.Description;

      Console.Out.WriteLine(desc);
    }
  }
}

編集終了

お役に立てれば。

于 2011-10-02T14:11:53.793 に答える