2016-11-23 1 views

답변

2

나는 문서 파일이 zip 파일이기 때문에 당신의 접근 방식이 작동하지 않았다고 생각 얻을 수없는 코드를 다음 사용합니다. 이미지를 필요로하는 형식을 알 수는 없지만 이런 식으로 시도하여 이미지 개체를 검색 할 수 있습니다. 나는 실천 사례로 나의 답을 업데이트하여 도움이 되길 바랍니다.

using (var document = WordprocessingDocument.Open("your document path", true)) 
{ 
    //Get the header 
    var header = document.MainDocumentPart.HeaderParts.First(); 
    //These are your paragraphs where you can get the headers Text from 
    var paragraphList = header.Header.Descendants<DocumentFormat.OpenXml.Wordprocessing.Paragraph>(); 
    //Get the imageId 
    string imgId = header.GetIdOfPart(header.ImageParts.First()); 

    var imageSource=new BitmapImage(); 
    //Get the imageStream 
    using (var imgStream = ((ImagePart)header.GetPartById(imgId)).GetStream()) 
    { 
     //Copy stream to BitmapImage 
     using (var memoryStream = new MemoryStream()) 
     { 
      imgStream.CopyTo(memoryStream); 
      memoryStream.Position = 0; 
      imageSource.BeginInit(); 
      imageSource.CreateOptions = BitmapCreateOptions.PreservePixelFormat; 
      imageSource.CacheOption = BitmapCacheOption.OnLoad; 
      imageSource.UriSource = null; 
      imageSource.StreamSource = memoryStream; 
      imageSource.EndInit(); 
     } 
     imageSource.Freeze(); 
     //Save BitmapImage to file 
     var encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(imageSource)); 
     using (var stream = new FileStream("your path for the image.png", FileMode.Create)) 
      encoder.Save(stream); 
    } 
} 

이것은 사진의 위치를 ​​얻을 수있는 방법이지만 사진이 절대 위치에있는 경우에만 작동한다는 것을 명심하십시오. 이 me..i을 위해 작동하지 않습니다

List<DocumentFormat.OpenXml.Wordprocessing.Drawing> sdtElementDrawing = 
    header.Header.Descendants<DocumentFormat.OpenXml.Wordprocessing.Drawing>().ToList(); 
    var distL= sdtElementDrawing.First().Anchor.DistanceFromLeft; 
+0

내가 어쩌면이 당신을 위해 작동합니다 내 대답을 업데이트 OPENXML –

+0

를 사용하여 이미지, 텍스트 등의 DOCX 파일 헤더 정보를 원한다. – Johannes

+1

고맙습니다 #jo 작동 중입니다 –

관련 문제