获取幻灯片中的所有文本
Contents
[
Hide
]
OpenXML SDK
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "获取幻灯片中的所有文本.pptx";
foreach (string s in GetAllTextInSlide(FileName, 0))
Console.WriteLine(s);
Console.ReadKey();
// 获取幻灯片中的所有文本。
public static string[] GetAllTextInSlide(string presentationFile, int slideIndex)
{
// 以只读方式打开演示文稿。
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, false))
{
// 将演示文稿和幻灯片索引传递给下一个 GetAllTextInSlide 方法,并返回它所返回的字符串数组。
return GetAllTextInSlide(presentationDocument, slideIndex);
}
}
public static string[] GetAllTextInSlide(PresentationDocument presentationDocument, int slideIndex)
{
// 验证演示文档是否存在。
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
// 验证幻灯片索引是否超出范围。
if (slideIndex < 0)
{
throw new ArgumentOutOfRangeException("slideIndex");
}
// 获取演示文稿文档的演示文稿部分。
PresentationPart presentationPart = presentationDocument.PresentationPart;
// 验证演示部分和演示文稿是否存在。
if (presentationPart != null && presentationPart.Presentation != null)
{
// 从演示部分获取演示文稿对象。
Presentation presentation = presentationPart.Presentation;
// 验证幻灯片 ID 列表是否存在。
if (presentation.SlideIdList != null)
{
// 从幻灯片 ID 列表中获取幻灯片 ID 集合。
DocumentFormat.OpenXml.OpenXmlElementList slideIds =
presentation.SlideIdList.ChildElements;
// 如果幻灯片 ID 在范围内...
if (slideIndex < slideIds.Count)
{
// 获取幻灯片的关系 ID。
string slidePartRelationshipId = (slideIds[slideIndex] as SlideId).RelationshipId;
// 从关系 ID 获取指定的幻灯片部分。
SlidePart slidePart =
(SlidePart)presentationPart.GetPartById(slidePartRelationshipId);
// 将幻灯片部分传递给下一个方法,然后返回该方法返回的字符串数组。
return GetAllTextInSlide(slidePart);
}
}
}
// 否则,返回 null。
return null;
}
public static string[] GetAllTextInSlide(SlidePart slidePart)
{
// 验证幻灯片部分是否存在。
if (slidePart == null)
{
throw new ArgumentNullException("slidePart");
}
// 创建一个新的字符串双向链表。
LinkedList<string> texts = new LinkedList<string>();
// 如果幻灯片存在...
if (slidePart.Slide != null)
{
// 遍历幻灯片中的所有段落。
foreach (DocumentFormat.OpenXml.Drawing.Paragraph paragraph in
slidePart.Slide.Descendants<DocumentFormat.OpenXml.Drawing.Paragraph>())
{
// 创建一个新的字符串构造器。
StringBuilder paragraphText = new StringBuilder();
// 遍历段落中的每一行。
foreach (DocumentFormat.OpenXml.Drawing.Text text in
paragraph.Descendants<DocumentFormat.OpenXml.Drawing.Text>())
{
// 将每一行追加到之前的行。
paragraphText.Append(text.Text);
}
if (paragraphText.Length > 0)
{
// 将每个段落添加到链表中。
texts.AddLast(paragraphText.ToString());
}
}
}
if (texts.Count > 0)
{
// 返回字符串数组。
return texts.ToArray();
}
else
{
return null;
}
}
Aspose.Slides
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "获取幻灯片中的所有文本.pptx";
foreach (string s in GetAllTextInSlide(FileName, 0))
Console.WriteLine(s);
Console.ReadKey();
// 获取幻灯片中的所有文本。
public static List<string> GetAllTextInSlide(string presentationFile, int slideIndex)
{
// 创建一个新的字符串列表。
List<string> texts = new List<string>();
// 实例化表示 PPTX 的 PresentationEx 类
using (Presentation pres = new Presentation(presentationFile))
{
// 访问幻灯片
ISlide sld = pres.Slides[slideIndex];
// 遍历形状以查找占位符
foreach (Shape shp in sld.Shapes)
if (shp.Placeholder != null)
{
// 获取每个占位符的文本
texts.Add(((AutoShape)shp).TextFrame.Text);
}
}
// 返回字符串数组。
return texts;
}