使用OpenXml在Powerpoint上更改文本值不匹配。

5
我使用OpenXml创建自定义PowerPoint演示文稿的方法如下:我在演示文稿上放置一个关键字,然后在OpenXml过程中找到它并更改文本值。一切都很好,但适合选项一开始不起作用。文本框有“自动调整大小:溢出时缩小文本;在形状中换行文本:开启”选项。在我的处理之后,新文本出现在正确的位置,但自适应大小未完成,我需要单击文本框并输入才能看到自适应大小起作用。我认为PowerPoint只在修改后检查选项。
我想要的是在处理结束时调用自适应大小选项。有人能帮我吗?
我希望你明白我想做什么。
谢谢。
1个回答

8
仅使用OpenXML是不可能的。 <a:normAutofit/> 标签由客户端应用程序(例如PowerPoint)用于根据需要放大或缩小文本。 OpenXML实际上并不呈现任何内容,因此在客户端进行呈现之前,它将像未自适应一样读取文本。
有一些选项可供控制 - 但没有一个很好。其中一个是在PowerPoint中使用VSTO或VBA检查PPTX打开时的所有形状,如果它们具有AutoFit标记,则重新呈现它们。第二种方法是根据形状的宽度和高度自己进行所有字体测量,然后将字体比例设置为适当的百分比。另一种方法是使文本框足够大以适应您将插入的最大文本量,然后关闭自适应。
很抱歉这并不能立即帮助您。我已经对这个特定主题进行了大量研究,结果都不太乐观。

感谢您的回答,显然您找到了与我相同的信息。我曾考虑过自己进行所有字体测量,但对于一个简单的选项来说,这变得有点复杂。最终,我创建的解决方案是如果输入字符串太大,则将其裁剪。再次感谢您的研究。 - Arnaud Bessems
我还研究了这个问题并发现以下信息:如果您从<a:bodyPr/>标记中删除<a:normAutoFit/>,那么当您打开文档时,Powerpoint会重新渲染文本框。 - Hans
@Hans:我刚测试了一下,它不起作用。实际上,无论是否使用<a:normAutofit/>,它都不起作用。而且,即使它稍微起作用(例如,您设置它在客户端中呈现),然后重新编辑<a:t>标记以包含大量文本,<a:normAutofit/>中的fontScale="85000" lnSpcReduction="10000"不会被使用。它需要在客户端中重新呈现,然后这两个属性才会改变。 - Todd Main
挖出这个旧帖子来说,用相同的文本替换所有实例(例如,将 <whitespace> 替换为 <whitespace>)更容易;这将在添加 <a:normAutofit/> 后强制每个幻灯片重新呈现! - Still
尝试在将bodyproperties添加到包含normAutoFit标记的形状后添加run153.Text = new A.Text(run153.InnerText.Replace(run153.Text.Text, "your text"));,但失败了...我该怎么做?@Still - DCodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接