2017-05-16 1 views
0

DOCX 파일의 텍스트와 이미지를 텍스트 파일로 추출해야합니다 (이미지를 그래픽 파일로 저장하십시오). 아래의 코드를 사용하여 이미지를 가져 와서 텍스트 파일 안에 참조로 저장할 수 있습니까?DocumentFormat.OpenXml.Paragraph를 사용하여 .DOCX에서 이미지를 추출하는 방법?

내가 사용하는 경우 :

List<ImagePart> imgPart = wordProcessingDoc.MainDocumentPart.ImageParts.ToList(); 

내가 모든 이미지를 얻을 수 있지만 때로는 하나 개의 이미지가 여러 곳에서 사용된다. 목록에서 특정 이미지를 가져 오기위한 참조를 찾을 수 없습니다. 여기 은 샘플 코드 (Extract table from DOCX)에서 가져온 것입니다 :이 게시물에 대한 답을 찾을

public static string ReadAllTextFromDocx(FileInfo fileInfo) 
{ 
    StringBuilder stringBuilder; 
    using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(fileInfo.FullName, false)) 
    { 
     NameTable nameTable = new NameTable(); 
     XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(nameTable); 
     xmlNamespaceManager.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main"); 

     string wordprocessingDocumentText; 
     using (StreamReader streamReader = new StreamReader(wordprocessingDocument.MainDocumentPart.GetStream())) 
     { 
      wordprocessingDocumentText = streamReader.ReadToEnd(); 
     } 

     stringBuilder = new StringBuilder(wordprocessingDocumentText.Length); 

     XmlDocument xmlDocument = new XmlDocument(nameTable); 
     xmlDocument.LoadXml(wordprocessingDocumentText); 

     XmlNodeList paragraphNodes = xmlDocument.SelectNodes("//w:p", xmlNamespaceManager); 
     foreach (XmlNode paragraphNode in paragraphNodes) 
     { 
      XmlNodeList textNodes = paragraphNode.SelectNodes(".//w:t | .//w:tab | .//w:br | .//w:drawing", xmlNamespaceManager); 
      foreach (XmlNode textNode in textNodes) 
      { 
       switch (textNode.Name) 
       { 
        case "w:t": 
         stringBuilder.Append(textNode.InnerText); 
         break; 

        case "w:tab": 
         stringBuilder.Append("\t"); 
         break; 

        case "w:br": 
         stringBuilder.Append("\v"); 
         break; 
        case "w:drawing": 
         stringBuilder.Append("----------------IMAGE HERE-------------"); 
         break; 
       } 
      } 

      stringBuilder.Append(Environment.NewLine); 
     } 
    } 

    return stringBuilder.ToString(); 
} 

답변

0

: Replace image in word doc using OpenXML

var imageParts =from graphic in par.Descendants<DocumentFormat.OpenXml.Drawing.Graphic>() 
let graphicData = graphic.Descendants<DocumentFormat.OpenXml.Drawing.GraphicData>().FirstOrDefault() 
           let pic = graphicData.ElementAt(0) 
           let nvPicPrt = pic.ElementAt(0).FirstOrDefault() 
           let blip = pic.Descendants<DocumentFormat.OpenXml.Drawing.Blip>().FirstOrDefault() 
           select new 
           { 
            Id = blip.GetAttribute("embed", xr).Value, 
            Filename = nvPicPrt.GetAttribute("name", xpic).Value 
           }; 
관련 문제