2011-11-06 53 views
0

我使用這些方法來獲取文本:獲取與PPTX格式正確的字體文本與OpenXML的

public static string[] GetAllTextInSlide(SlidePart slidePart) 
    { 
     // Verify that the slide part exists. 
     if (slidePart == null) 
     { 
      throw new ArgumentNullException("slidePart"); 
     } 

     // Create a new linked list of strings. 
     LinkedList<string> texts = new LinkedList<string>(); 

     // If the slide exists... 
     if (slidePart.Slide != null) 
     { 
      // Iterate through all the paragraphs in the slide. 
      foreach (var paragraph in slidePart.Slide.Descendants<DocumentFormat.OpenXml.Drawing.Paragraph>()) 
      { 
       // Create a new string builder.      
       StringBuilder paragraphText = new StringBuilder(); 

       // Iterate through the lines of the paragraph. 
       foreach (var text in paragraph.Descendants<DocumentFormat.OpenXml.Drawing.Text>()) 
       { 
        // Append each line to the previous lines. 
        paragraphText.Append(text.Text); 
       } 

       if (paragraphText.Length > 0) 
       { 
        // Add each paragraph to the linked list. 
        texts.AddLast(paragraphText.ToString()); 
       } 
      } 
     } 

     if (texts.Count > 0) 
     { 
      // Return an array of strings. 
      return texts.ToArray(); 
     } 
     else 
     { 
      return null; 
     } 
    } 

public static string[] GetAllTextInSlide(PresentationDocument presentationDocument, int slideIndex) 
    { 
     // Verify that the presentation document exists. 
     if (presentationDocument == null) 
     { 
      throw new ArgumentNullException("presentationDocument"); 
     } 

     // Verify that the slide index is not out of range. 
     if (slideIndex < 0) 
     { 
      throw new ArgumentOutOfRangeException("slideIndex"); 
     } 

     // Get the presentation part of the presentation document. 
     PresentationPart presentationPart = presentationDocument.PresentationPart; 

     // Verify that the presentation part and presentation exist. 
     if (presentationPart != null && presentationPart.Presentation != null) 
     { 
      // Get the Presentation object from the presentation part. 
      Presentation presentation = presentationPart.Presentation; 

      // Verify that the slide ID list exists. 
      if (presentation.SlideIdList != null) 
      { 
       // Get the collection of slide IDs from the slide ID list. 
       var slideIds = presentation.SlideIdList.ChildElements; 

       // If the slide ID is in range... 
       if (slideIndex < slideIds.Count) 
       { 
        // Get the relationship ID of the slide. 
        string slidePartRelationshipId = (slideIds[slideIndex] as SlideId).RelationshipId; 

        // Get the specified slide part from the relationship ID. 
        SlidePart slidePart = (SlidePart)presentationPart.GetPartById(slidePartRelationshipId); 

        // Pass the slide part to the next method, and then return the array of strings that method returns to the previous method. 
        return GetAllTextInSlide(slidePart); 
       } 
      } 
     } 
     // Else, return null. 
     return null; 
    } 

,但他們只是給我的話。我怎樣才能得到正確的字體和顏色的文字?

回答

1

試試這個....

using System; 
using System.Linq; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Drawing; 


namespace OpenXmlGetPowerpointTextInfo 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (PresentationDocument myPres = PresentationDocument.Open(@"test.pptx", true)) 
      { 
       PresentationPart presPart = myPres.PresentationPart; 
       //SlidePart slide = presPart.GetPartsOfType<SlidePart>().FirstOrDefault(); 
       SlidePart[] slidePartList = presPart.SlideParts.ToArray(); 
       foreach (SlidePart part in slidePartList) 
       { 
        RunProperties[] runProList = part.Slide.Descendants<RunProperties>().ToArray(); 
        foreach (RunProperties r in runProList) 
        { 
         Console.WriteLine(r.FontSize.Value); 
        } 
       } 
      } 
     } 
    } 
} 
+0

它不工作。 –