【问题标题】:SharpDX Character SpacingSharpDX 字符间距
【发布时间】:2017-05-07 22:57:19
【问题描述】:

我正在开发一个应用程序,该应用程序必须重新创建 PowerPoint 如何适合文本(缩小以适合),以确定允许一组文本适合 PowerPoint 中给定文本框所需的必要字体比例。

我是用Aspose库来生成幻灯片的,但是Aspose计算出来的字体比例经常是不正确的,所以第一次打开演示文稿时,有些文字可能显示得比预期的大,导致长文本流出文本框和其他相邻的文本框。

起初我尝试使用 GDI MeasureString() 和手动自动换行算法,但这非常不准确。我发现 PowerPoint 使用 DirectWrite 将文本呈现到屏幕上,因此我尝试使用 ShaprDX 和 TextLayout 并获得了更好的结果。

我的算法涉及反复尝试在给定文本框中布局文本并减小字体比例直到适合为止。

但是我最近发现 PowerPoint 的字符间距似乎比 SharpDX 宽,不多,但在一些字母之后,它导致 PowerPoint 中的文本换行比 SharpDX 中更早。

Sample image

如果您查看示例图像,我截取了 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 aboutHow to ask a good question 以及完美的问题以及如何创建Minimal, Complete and Verifiable example SO 不是免费的编码或代码转换或调试或教程或库查找服务在这里我们修复您的尝试,我们不编码给你的东西
  • 在 PowerPoint 对象模型中,任何文本范围都具有 BoundHeight、BoundTop、BoundLeft 和 BoundWidth 属性,这些属性将告诉您文本“设置”的大小。如果 Aspose 允许您访问这些属性,您可以不断缩小或放大文本大小,直到找到匹配项。

标签: c# powerpoint sharpdx


【解决方案1】:

我已经观察到您的要求,并希望分享 Aspose.Slides 仅使用 PowerPoint 的内部属性进行文本换行,例如缩小文本 w.r.t 形状或调整形状 w.r.t 以适应形状中的文本数量。没有这样的边界访问。但是,您可以获取其中包含文本的形状的 x、y、宽度和高度。

Presentation pres=new Presentation("TEST.pptx");
ISlide slide=pres.Slides[0];
//Shape holding text is an AutoShape
IAutoShape ashp=(IAutoShape)slide.Shapes[0]; 

float x=ashp.X;
float y=ashp.Y;
float width=ashp.Width;
float height =ashp.Height;

请注意,返回的值映射为每英寸 72 像素。即 10'' X 7.5'' 的标准幻灯片在 Aspose.Slides 中的大小相当于 720 x 540。我希望这会有所帮助。

我在 Aspose 担任开发人员/宣传员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多