首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SharpDX字符间距

SharpDX字符间距
EN

Stack Overflow用户
提问于 2016-12-22 18:33:45
回答 1查看 139关注 0票数 0

我正在开发一个应用程序,它必须重新创建PowerPoint如何适应文本(收缩到适合),以便确定必要的字体比例,以允许设置文本以适应PowerPoint中给定的文本框。

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

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

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

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

Sample image

如果您查看示例图像,我以100%的比例拍摄了PowerPoint幻灯片的屏幕截图,并将SharpDX的屏幕截图渲染到了一个表单中。我已经在PowerPoint镜像上覆盖了SharpDX镜像。

SharpDX文本更长,因为它已经“适应”了给定的字体大小。

文本:ΑποτελέσματαέναντιΠαγκόσμιοΠρότυποΥψηλώνΕπιδόσεων字体: Arial 11pt文本框大小: 444px x 24px (4.63“x 0.26") 0周围页边距

在PowerPoint中,如果没有按大小缩小,则此文本将自动换行。

在SharpDX中,文本不会换行。

我使用以下公式将字体大小从点转换为像素:

像素=点数x 96f / 72f;

我还没有找到在SharpDX中设置字符间距的方法。这有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2016-12-27 19:53:29

我已经观察到你的需求,并且想分享一下,Aspose.Slides只使用PowerPoint的内部属性来进行文本换行,比如缩小文本w.r.t形状或调整形状w.r.t以适应形状中的文本量。不存在这样的边界访问。但是,您可以获得在其中封装文本的形状的x、y、宽度和高度。

代码语言:javascript
运行
复制
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担任开发人员/布道者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41281065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档