簡體   English   中英

Aspose 不能寫多個段落

[英]Cannot Write Multiple Paragraph in Aspose

當我嘗試在現有 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)我的代碼中是否缺少任何東西? 謝謝

我已經觀察到您的要求,並建議您嘗試使用以下示例代碼。 在您的示例代碼中,您將不同的段落添加到 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 擔任支持開發人員/傳播者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM