【发布时间】:2017-05-07 22:57:19
【问题描述】:
我正在开发一个应用程序,该应用程序必须重新创建 PowerPoint 如何适合文本(缩小以适合),以确定允许一组文本适合 PowerPoint 中给定文本框所需的必要字体比例。
我是用Aspose库来生成幻灯片的,但是Aspose计算出来的字体比例经常是不正确的,所以第一次打开演示文稿时,有些文字可能显示得比预期的大,导致长文本流出文本框和其他相邻的文本框。
起初我尝试使用 GDI MeasureString() 和手动自动换行算法,但这非常不准确。我发现 PowerPoint 使用 DirectWrite 将文本呈现到屏幕上,因此我尝试使用 ShaprDX 和 TextLayout 并获得了更好的结果。
我的算法涉及反复尝试在给定文本框中布局文本并减小字体比例直到适合为止。
但是我最近发现 PowerPoint 的字符间距似乎比 SharpDX 宽,不多,但在一些字母之后,它导致 PowerPoint 中的文本换行比 SharpDX 中更早。
如果您查看示例图像,我截取了 PowerPoint 幻灯片 100% 的屏幕截图,并将 SharpDX 的屏幕截图呈现为表单。我已将 SharpDX 图像覆盖在 PowerPoint 图像之上。
SharpDX 文本更长,因为它已经“适合”给定字体大小。
文本:Αποτελέσματα έναντι Παγκόσμιο Πρότυπο Υψηλών Επιδόσεων 字体:Arial 11pt 文本框大小:444px x 24px (4.63" x 0.26") 周围 0 个边距
在 PowerPoint 中,如果不缩小以适合,此文本将自动换行。
在 SharpDX 中,文本不换行。
我正在使用以下公式将字体大小从点转换为像素:
像素 = 点 x 96f / 72f;
我还没有找到在 SharpDX 中设置字符间距的方法。这甚至可能吗?
【问题讨论】:
-
欢迎来到 SO。请阅读What topics can I ask about 和How to ask a good question 以及完美的问题以及如何创建Minimal, Complete and Verifiable example SO 不是免费的编码或代码转换或调试或教程或库查找服务在这里我们修复您的尝试,我们不编码给你的东西
-
在 PowerPoint 对象模型中,任何文本范围都具有 BoundHeight、BoundTop、BoundLeft 和 BoundWidth 属性,这些属性将告诉您文本“设置”的大小。如果 Aspose 允许您访问这些属性,您可以不断缩小或放大文本大小,直到找到匹配项。
标签: c# powerpoint sharpdx