无法在Aspose中写入多个段落

问题描述 投票:0回答:1

当我尝试在现有Shape中编写多个段落时遇到问题。只写第一段。我调试了代码,发现Shape对象是我想要的所有段落。问题是当我写文件时,我只找到第一个。我与您分享项目代码。

class Program
    {
        public static void Run()
        {

            string dataDir = ConfigurationManager.AppSettings["directoryToSave"];
            string srcDir = ConfigurationManager.AppSettings["Source"];
            string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string file = Path.Combine(appData, srcDir);
            using (Presentation presentation = new Presentation(srcDir))
            {
                IMasterLayoutSlideCollection layoutSlides = presentation.Masters[0].LayoutSlides;
                ILayoutSlide layoutSlide = null;

                foreach (ILayoutSlide titleAndObjectLayoutSlide in layoutSlides)
                {
                    if (titleAndObjectLayoutSlide.Name == "TITRE_CONTENU")
                    {
                        layoutSlide = titleAndObjectLayoutSlide;
                        break;
                    }
                }            

                var contenu = File.ReadAllText(@"E:\DemosProject\PF_GEN\PF_GEN\Source\contenu.txt", Encoding.UTF8);
                IAutoShape contenuShape = (IAutoShape)layoutSlide.Shapes.SingleOrDefault(r => r.Name.Equals("contenu"));

                ITextFrame txt = ((IAutoShape)contenuShape).TextFrame;
                txt.Paragraphs.Clear();
                string[] lines = contenu.Split(new[] { Environment.NewLine }, StringSplitOptions.None).Where(str => !String.IsNullOrEmpty(str)).ToArray();
                for (int i = 0; i < lines.Length; i++)
                {
                    var portion = new Portion();
                    portion.Text = lines[i];
                    var paragraphe = new Paragraph();
                    paragraphe.Portions.Add(portion);
                    txt.Paragraphs.Add(paragraphe);
                }
                presentation.Slides.InsertEmptySlide(0, layoutSlide);
                presentation.Save(dataDir + "AddLayoutSlides_out.pptx", SaveFormat.Pptx);
            }
        }

        static void Main(string[] args)
        {
            try
            {
                var path = ConfigurationManager.AppSettings["sourceAsposeLicensePath"];
                License license = new License();
                license.SetLicense(path);
                Run();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error" + ex.Message);
            }
            finally
            {
                Console.WriteLine("Terminated");
                Console.ReadKey();
            }
        }

    }

您可以在附件文件中找到ppt文件(源文件)。 (https://gofile.io/?c=JpBDS8 1)我的代码中缺少任何内容吗?谢谢

c# aspose aspose-slides
1个回答
0
投票
我已遵守您的要求,建议您尝试使用以下示例代码。在示例代码中,您正在将不同的段落添加到LayoutSlide内的形状,然后使用该LayoutSlide添加包含所需形状的幻灯片。这种方法是不正确的。实际上,您首先需要基于LayoutSlide添加幻灯片,然后根据需要向该形状添加文本。以下代码将对您有所帮助。

public static void RunParaText() { string path = @"C:\Aspose Data\"; string dataDir = path; string srcDir = path + "Master.pptx"; //string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); //string file = Path.Combine(appData, srcDir); using (Presentation presentation = new Presentation(srcDir)) { IMasterLayoutSlideCollection layoutSlides = presentation.Masters[0].LayoutSlides; ILayoutSlide layoutSlide = null; foreach (ILayoutSlide titleAndObjectLayoutSlide in layoutSlides) { if (titleAndObjectLayoutSlide.Name == "TITRE_CONTENU") { layoutSlide = titleAndObjectLayoutSlide; break; } } var contenu = File.ReadAllText(dataDir+"contenu.txt", Encoding.UTF8); var slide=presentation.Slides.InsertEmptySlide(0, layoutSlide); IAutoShape contenuShape = (IAutoShape)slide.Shapes.SingleOrDefault(r => r.Name.Equals("contenu")); //IAutoShape contenuShape = (IAutoShape)layoutSlide.Shapes.SingleOrDefault(r => r.Name.Equals("contenu")); ITextFrame txt = ((IAutoShape)contenuShape).TextFrame; txt.Paragraphs.Clear(); string[] lines = contenu.Split(new[] { Environment.NewLine }, StringSplitOptions.None).Where(str => !String.IsNullOrEmpty(str)).ToArray(); for (int i = 0; i < lines.Length; i++) { var portion = new Portion(); portion.Text = lines[i]; var paragraphe = new Paragraph(); paragraphe.Portions.Add(portion); txt.Paragraphs.Add(paragraphe); } //Change font size w.r.t shape size contenuShape.TextFrame.TextFrameFormat.AutofitType = TextAutofitType.Normal; presentation.Save(dataDir + "AddLayoutSlides_out.pptx", SaveFormat.Pptx); } }

我在Aspose担任支持开发人员/宣传人员。

© www.soinside.com 2019 - 2024. All rights reserved.