Python で AutoFit を使用してプレゼンテーションを強化する
はじめに
デフォルトでは、テキスト ボックスを追加すると Microsoft PowerPoint は Resize shape to fit text 設定を使用します。テキスト ボックスは自動的にサイズ変更され、テキストが常に収まるようになります。

- テキスト ボックス内のテキストが長くなるまたは大きくなると、PowerPoint はテキスト ボックスの高さを増やして拡大し、より多くのテキストを収められるようにします。
- テキスト ボックス内のテキストが短くなるまたは小さくなると、PowerPoint は余分なスペースを削除するためにテキスト ボックスの高さを減らして縮小します。
PowerPoint では、テキスト ボックスの自動フィット 動作を制御する 4 つの重要なパラメータまたはオプションがあります。
- Do not Autofit
- Shrink text on overflow
- Resize shape to fit text
- Wrap text in shape.

Aspose.Slides for Python via Java は、TextFrameFormat クラスのいくつかのプロパティとして、プレゼンテーション内のテキスト ボックスの自動フィット 動作を制御する同様のオプションを提供します。
Resize a Shape to Fit Text
テキストが変更された後も常にボックスに収まるようにしたい場合は、Resize shape to fit text オプションを使用する必要があります。この設定を指定するには、TextFrameFormat クラスの setAutofitType メソッドに Shape を指定します。

この Python コードは、PowerPoint プレゼンテーションでテキストが常にボックスに収まるように指定する方法を示しています。
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ShapeType, Portion, FillType, TextAutofitType, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)
portion = Portion("lorem ipsum...")
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)
text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
text_frame_format.setAutofitType(TextAutofitType.Shape)
presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
テキストが長くなるまたは大きくなると、テキスト ボックスは自動的に高さが増えてサイズ変更され、すべてのテキストが収まります。テキストが短くなると、逆の動作が行われます。
Do Not Autofit
テキスト ボックスまたはシェイプが、内部のテキストの変更にかかわらずサイズを保持するようにしたい場合は、Do not Autofit オプションを使用します。この設定を指定するには、TextFrameFormat クラスの setAutofitType メソッドに None を指定します。

この Python コードは、PowerPoint プレゼンテーションでテキスト ボックスが常にサイズを保持するように指定する方法を示しています。
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ShapeType, Portion, FillType, TextAutofitType, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)
portion = Portion("lorem ipsum...")
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)
text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
text_frame_format.setAutofitType(TextAutofitType.None_)
presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
テキストがボックスに対して長すぎると、テキストがはみ出します。
Shrink Text on Overflow
テキストがボックスに対して長すぎる場合、Shrink text on overflow オプションを使用して、テキストのサイズと間隔を縮小し、ボックスに収めることができます。この設定を指定するには、TextFrameFormat クラスの setAutofitType メソッドに Normal を指定します。

この Python コードは、PowerPoint プレゼンテーションでオーバーフロー時にテキストを縮小するように指定する方法を示しています。
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ShapeType, Portion, FillType, TextAutofitType, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)
portion = Portion("lorem ipsum...")
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)
text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
text_frame_format.setAutofitType(TextAutofitType.Normal)
presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Note
Shrink text on overflow オプションが使用されると、テキストがボックスに対して長くなったときだけ設定が適用されます。Wrap Text
テキストがシェイプの幅を超えたときに、そのシェイプ内でテキストを折り返したい場合は、Wrap text in shape パラメータを使用します。この設定を指定するには、TextFrameFormat クラスの setWrapText メソッドに NullableBool.True_ を指定します。
この Python コードは、PowerPoint プレゼンテーションでラップ テキスト設定を使用する方法を示しています。
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, ShapeType, Portion, FillType, NullableBool, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)
portion = Portion("lorem ipsum...")
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)
text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
text_frame_format.setWrapText(NullableBool.True_)
presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Warning
シェイプに対して setWrapText メソッドを NullableBool.False で使用すると、シェイプ内のテキストがシェイプの幅より長くなった場合に、テキストは単一行のままシェイプの境界を超えて表示されます。FAQ
テキスト フレームの内部余白は AutoFit に影響しますか?
はい。パディング(内部余白)はテキストの使用可能領域を減らすため、AutoFit がより早く発動し、フォントが縮小されたりシェイプがサイズ変更されたりします。AutoFit を調整する前に余白を確認・調整してください。
AutoFit は手動改行やソフト改行とどのように連動しますか?
強制改行はそのまま残り、AutoFit はそれらの周囲でフォントサイズと間隔を調整します。不要な改行を削除すると、AutoFit がテキストを縮小する必要性が減少することがあります。
テーマ フォントの変更やフォント置換は AutoFit の結果に影響しますか?
はい。字形メトリクスが異なるフォントに置換すると、テキストの幅や高さが変わり、最終的なフォントサイズや折り返しが変化します。フォントを変更または置換した後は、スライドを再確認してください。