管理自动适应设置

默认情况下,当您添加文本框时,Microsoft PowerPoint 使用 Resize shape to fix text 设置——它会自动调整文本框大小,以确保文本始终适合其中。

textbox-in-powerpoint

  • 当文本框中的文本变得更长或更大时,PowerPoint 会自动放大文本框——增加其高度——以容纳更多文本。
  • 当文本框中的文本变得更短或更小时时,PowerPoint 会自动缩小文本框——减少其高度——以清除多余空间。

在 PowerPoint 中,有 4 个重要参数或选项用于控制文本框的自动适应行为:

  • Do not Autofit
  • Shrink text on overflow
  • Resize shape to fit text
  • Wrap text in shape.

autofit-options-powerpoint

Aspose.Slides for Node.js via Java 提供了类似的选项——在 TextFrameFormat 类下的一些属性——允许您控制演示文稿中文本框的自动适应行为。

调整形状以适应文本

如果您希望文本在修改后始终适应其所在的框,需要使用 Resize shape to fix text 选项。要指定此设置,请从 TextFrameFormat 类调用 setAutofitType 方法,传入 Shape 值。

alwaysfit-setting-powerpoint

下面的 JavaScript 代码演示如何在 PowerPoint 演示文稿中指定文本必须始终适应其框:

var pres = new aspose.slides.Presentation();
try {
    var slide = pres.getSlides().get_Item(0);
    var autoShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 30, 30, 350, 100);
    var portion = new aspose.slides.Portion("lorem ipsum...");
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
    portion.getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    autoShape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion);
    var textFrameFormat = autoShape.getTextFrame().getTextFrameFormat();
    textFrameFormat.setAutofitType(aspose.slides.TextAutofitType.Shape);
    pres.save("Output-presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

如果文本变得更长或更大,文本框会自动调整大小(高度增加),以确保所有文本都能适应。如果文本变短,则相反。

不自动适应

如果您希望文本框或形状无论文本如何变化都保持其尺寸,需要使用 Do not Autofit 选项。要指定此设置,请从 TextFrameFormat 类调用 setAutofitType 方法,传入 None 值。

donotautofit-setting-powerpoint

下面的 JavaScript 代码演示如何在 PowerPoint 演示文稿中指定文本框必须保持其尺寸:

var pres = new aspose.slides.Presentation();
try {
    var slide = pres.getSlides().get_Item(0);
    var autoShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 30, 30, 350, 100);
    var portion = new aspose.slides.Portion("lorem ipsum...");
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
    portion.getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    autoShape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion);
    var textFrameFormat = autoShape.getTextFrame().getTextFrameFormat();
    textFrameFormat.setAutofitType(aspose.slides.TextAutofitType.None);
    pres.save("Output-presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

当文本对其框来说过长时,会溢出。

溢出时收缩文本

如果文本对其框来说过长,通过 Shrink text on overflow 选项,您可以指定将文本的大小和间距缩小以使其适应框。要指定此设置,请从 TextFrameFormat 类调用 setAutofitType 方法,传入 Normal 值。

shrinktextonoverflow-setting-powerpoint

下面的 JavaScript 代码演示如何在 PowerPoint 演示文稿中指定在溢出时收缩文本:

var pres = new aspose.slides.Presentation();
try {
    var slide = pres.getSlides().get_Item(0);
    var autoShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 30, 30, 350, 100);
    var portion = new aspose.slides.Portion("lorem ipsum...");
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
    portion.getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    autoShape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion);
    var textFrameFormat = autoShape.getTextFrame().getTextFrameFormat();
    textFrameFormat.setAutofitType(aspose.slides.TextAutofitType.Normal);
    pres.save("Output-presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

换行文本

如果您希望形状内的文本在超出形状边界(仅宽度)时换行,需要使用 Wrap text in shape 参数。要指定此设置,必须从 TextFrameFormat 类调用 setWrapText 方法,传入 true 值。

下面的 JavaScript 代码演示如何在 PowerPoint 演示文稿中使用换行文本设置:

var pres = new aspose.slides.Presentation();
try {
    var slide = pres.getSlides().get_Item(0);
    var autoShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 30, 30, 350, 100);
    var portion = new aspose.slides.Portion("lorem ipsum...");
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
    portion.getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    autoShape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion);
    var textFrameFormat = autoShape.getTextFrame().getTextFrameFormat();
    textFrameFormat.setWrapText(aspose.slides.NullableBool.True);
    pres.save("Output-presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

常见问题

Do the text frame’s internal margins affect AutoFit?
文本框的内部边距会影响 AutoFit 吗?
是的。内部边距(填充)会减小可用于文本的面积,从而使 AutoFit 更早触发——会更快缩小字体或调整形状大小。请在调优 AutoFit 之前检查并调整边距。

How does AutoFit interact with manual and soft line breaks?
AutoFit 与手动和软换行如何交互?
强制换行会保留下来,AutoFit 会在它们周围调整字体大小和间距。删除不必要的换行通常可以降低 AutoFit 的收缩力度。

Does changing the theme font or triggering font substitution affect AutoFit results?
更改主题字体或触发字体替换会影响 AutoFit 结果吗?
会。替换为字形度量不同的字体会改变文本的宽度/高度,从而可能改变最终的字体大小和换行方式。进行任何字体更改或替换后,请重新检查幻灯片。