Как найти текст в форме pptx (Spire.Presentation) - PullRequest
0 голосов
/ 27 февраля 2019

Столкнулся с проблемой изменения текста в презентации.Я использую Spire.Presentation, и на странице много разных фигур.Моя версия находит только 1 текст из 10. Как изменить формы [i], чтобы я мог получить все тексты

using Spire.Presentation;
using System;
using System.Linq;
using System.Collections.Generic;
    static void Main(string[] args)
            {
                Presentation presentation = new Presentation();
                //Open presentation and convert slides
                presentation.LoadFromFile(@"C:\input.pptx");
                //if (presentation == null) { return };
                List<string> texts = new List<string>();
                for (int i = 0; i < presentation.Slides.Count; i++)
                {
                    //Get the shape from slide, get the text from shape and save to a new string variable.
                    IAutoShape shape = presentation.Slides[i].Shapes[i] as IAutoShape;IAutoShape shape = presentation.Slides[i].Shapes.GetEnumerator() as IAutoShape;
            if (shape != null)
            {
                foreach (var s in shape.ToString())
                {
                    var originalText = shape.TextFrame.TextRange;
                    originalText.FontHeight = 12;
                    originalText.IsItalic = TriState.True;
                    originalText.TextUnderlineType = TextUnderlineType.Single;
                    originalText.LatinFont = new TextFont("Arial");
                }
            }
            Console.WriteLine(shape);
            Console.ReadKey();
                    //save the slide to Image
                    var image = presentation.Slides[i].SaveAsImage();
                    String fileName = String.Format(@"C:\img-{0}.png", i);
                    image.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
                }
            }

1 Ответ

0 голосов
/ 27 февраля 2019

Похоже, что вы просматриваете слайды, но не просматриваете все фигуры на слайде.Этот код будет

  • первой формы первого слайда

  • второй формы второго слайда

  • третья фигура третьего слайда
  • ...

Я думаю, что ваше решение также состоит в том, чтобы пройти по всем фигурам на каждой странице, например:

    using Spire.Presentation;
    using System;
    using System.Linq;
    using System.Collections.Generic;
        static void Main(string[] args)
                {
                    Presentation presentation = new Presentation();
                    //Open presentation and convert slides
                    presentation.LoadFromFile(@"C:\input.pptx");
                    //if (presentation == null) { return };
                    List<string> texts = new List<string>();
                    for (int i = 0; i < presentation.Slides.Count; i++)
                    {
                      for(int j = 0; j < presentation.Slides[i].Shapes.Count;j++)
                      {
                        //Get the shape from slide, get the text from shape and save to a new string variable.
                        IAutoShape shape = presentation.Slides[i].Shapes[j] as IAutoShape;IAutoShape shape = presentation.Slides[i].Shapes.GetEnumerator() as IAutoShape;
                if (shape != null)
                {
                    foreach (var s in shape.ToString())
                    {
                        var originalText = shape.TextFrame.TextRange;
                        originalText.FontHeight = 12;
                        originalText.IsItalic = TriState.True;
                        originalText.TextUnderlineType = TextUnderlineType.Single;
                        originalText.LatinFont = new TextFont("Arial");
                    }
                }
                Console.WriteLine(shape);
                Console.ReadKey();
                        //save the slide to Image
                        var image = presentation.Slides[i].SaveAsImage();
                        String fileName = String.Format(@"C:\img-{0}.png", i);
                        image.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
                    }
                  }
                }
...