Невозможно написать несколько абзацев в Aspose - PullRequest
0 голосов
/ 12 февраля 2020

У меня проблема при попытке написать несколько абзацев в существующей форме. Только первый абзац написан. Я отладил код и обнаружил, что объект 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) Чего-то не хватает в моем коде? Спасибо

1 Ответ

0 голосов
/ 13 февраля 2020

@ Adouani Riadh,

Я соблюдаю ваши требования и предлагаю вам попробовать использовать следующий образец кода на своей стороне. В своем примере кода вы добавляете различные абзацы к фигуре внутри 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.

...