Извлечение текста из слайдов PowerPoint - PullRequest
1 голос
/ 08 марта 2011

У меня есть слайд PowerPoint, созданный с использованием Office 2010 (и 2007), который мне необходим для программного извлечения текста. Я предполагаю, что где-то Office создает XML-файл, в котором может быть весь текст, который мне нужен.

Есть ли способ сделать это, и как мне поступить?

У меня есть VS2010, SharePoint Designer 2007 доступен для инструментов.

Спасибо

Risho

1 Ответ

0 голосов
/ 08 марта 2011

Да, есть сложный способ, простой и даже более простой способ сделать это с помощью Linq-to-XML.Обратите внимание, что я не использую Open XML SDK - я просто использую VB.NET с XML-литералами и System.IO.Packaging.Конечно, вы можете сделать это более сложным способом, используя SDK, C # и т. Д. - это зависит от того, какова ваша среда / предпочтения.

  1. Трудный путь : пройти через всеабзац, и не только вытащить текст, но и вытащить все форматирование (полужирный шрифт, маркеры и т., без форматирования.
  2. Еще более простой способ : перейдите на каждый слайд и просто вытяните весь текст.

Вот как бы вы сделали # 2 (простойпуть):

Imports System.IO
Imports System.IO.Packaging 'Add reference to WindowsBase for this
Imports <xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
Imports <xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
Imports <xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
Module Module1
    Public Const documentRelationshipType As String = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
    Sub Main()
        Dim slide, document As XElement
        Dim pptPackage As Package = Nothing
        Dim slidePart, documentPart As PackagePart
        Dim filePath As String = "C:\Users\Todd\Desktop\yourpresentation.pptx"
        pptPackage = Package.Open(filePath, FileMode.Open, FileAccess.ReadWrite)
        Using pptPackage
            Dim documentRelationship As PackageRelationship = pptPackage.GetRelationshipsByType(documentRelationshipType).FirstOrDefault
            Dim documentUri As Uri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), documentRelationship.TargetUri)
            documentPart = pptPackage.GetPart(documentUri)
            document = XElement.Load(New StreamReader(documentPart.GetStream))

            Dim slideList = From e In document.<p:sldIdLst>.<p:sldId>

            For i = 0 To slideList.Count - 1

                Dim slideReference As String = slideList(i).@r:id.ToString
                slidePart = pptPackage.GetPart(PackUriHelper.ResolvePartUri(documentPart.Uri, documentPart.GetRelationship(slideReference).TargetUri))
                slide = XElement.Load(New StreamReader(slidePart.GetStream))
                Dim rawText = From e In slide...<a:t>

                For Each t In rawText
                    Console.WriteLine(t.Value)
                Next

            Next
        End Using
        Console.ReadLine()
    End Sub
End Module
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...