c# - 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)我的代码中是否缺少任何东西?谢谢
解决方案
@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 担任支持开发人员/传播者。
推荐阅读
- node.js - 当包 X 作为依赖项安装时会运行什么 npm 脚本,但当我在包 X 上运行 npm install 时不会运行?
- matlab - 将数组处理为函数参数
- r - 如何从所有图中有选择地打印图
- spring - Spring Boot + 多数据源问题 + 生产集群环境
- python-imaging-library - 使用 mss 调整屏幕截图的大小,以便使用 pytesseract 更好地阅读
- r - R rtweet:如果给定 Twitter 句柄没有返回结果,则 search_tweets 循环不会继续
- ios - 在刷新之前,第一个 Firebase 查询项出现问题
- sql - 如何用相同 PolicyNumber 的非空值替换空字符串
- javascript - AngularJS单击时突出显示锚标记
- html - Bootstrap 4:高度相等的 div,中间有颜色填充和装订线