كيفية تنسيق النص في Java

Aspose.Slides FOSS for Java provides fine-grained text formatting through the PortionFormat class. A Portion هو أصغر وحدة مستقلة من النص؛ يطابق تشغيل تنسيق واحد داخل الفقرة. يوضح هذا الدليل كيفية تطبيق bold, italic, font size, و color على النص في presentation.

دليل خطوة بخطوة

الخطوة 1: إضافة تبعية Maven

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

الخطوة 2: إضافة شكل مع إطار نص

قبل تنسيق النص، يجب أن يحتوي الشكل على TextFrame. استخدم shape.addTextFrame() لإنشاء واحد.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    IAutoShape shape = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 500, 150
    );
    ITextFrame tf = shape.addTextFrame("Default text: will be formatted");
    prs.save("output.pptx", SaveFormat.PPTX);
}

الخطوة 3: الوصول إلى TextFrame

shape.addTextFrame() يرجع الـ TextFrame كائن. يمكنك أيضًا استرجاعه لاحقًا عبر shape.getTextFrame().

ITextFrame tf = shape.getTextFrame();          // if the frame already exists
ITextFrame tf = shape.addTextFrame("");        // creates a new frame

A TextFrame يحتوي على قائمة من Paragraph كائنات (tf.getParagraphs()). كل Paragraph يحتوي Portion كائنات (paragraph.getPortions()).


الخطوة 4: تطبيق تنسيق الغامق والمائل

استخدم portionFormat.setFontBold() و portionFormat.setFontItalic(). تقبل هذه الأساليب NullableBool.TRUE, NullableBool.FALSE,، أو NullableBool.NOT_DEFINED (وراثة من الرئيس).

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    IAutoShape shape = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 500, 150
    );
    ITextFrame tf = shape.addTextFrame("Bold and italic text");

    IPortionFormat fmt = tf.getParagraphs().get(0)
        .getPortions().get(0).getPortionFormat();
    fmt.setFontBold(NullableBool.TRUE);
    fmt.setFontItalic(NullableBool.TRUE);

    prs.save("bold-italic.pptx", SaveFormat.PPTX);
}

الخطوة 5: ضبط حجم الخط واللون

اضبط portionFormat.setFontHeight() لتعيين الحجم (بالنقاط) واستخدام getFillFormat() للون.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    IAutoShape shape = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 500, 150
    );
    ITextFrame tf = shape.addTextFrame("Large corporate-blue heading");

    IPortionFormat fmt = tf.getParagraphs().get(0)
        .getPortions().get(0).getPortionFormat();
    fmt.setFontHeight(32);                          // 32pt font
    fmt.setFontBold(NullableBool.TRUE);
    fmt.getFillFormat().setFillType(FillType.SOLID);
    fmt.getFillFormat().getSolidFillColor().setColor(
        Color.fromArgb(255, 0, 70, 127)
    );

    prs.save("colored-text.pptx", SaveFormat.PPTX);
}

Color.fromArgb(alpha, red, green, blue) يقبل القيم من 0 إلى 255 لكل قناة.


الخطوة 6: عدة أجزاء في فقرة واحدة

يمكن لفقرة واحدة أن تحتوي على عدة أجزاء بتنسيق مختلف. أضف جديدًا Portion إلى فقرة getPortions() مجموعة:

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IParagraph;
import org.aspose.slides.foss.IPortion;
import org.aspose.slides.foss.Portion;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    IAutoShape shape = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 600, 100
    );
    ITextFrame tf = shape.addTextFrame("");  // start with empty frame

    IParagraph paragraph = tf.getParagraphs().get(0);

    // First portion: normal text
    IPortion portion1 = paragraph.getPortions().get(0);
    portion1.setText("Normal text followed by ");
    portion1.getPortionFormat().setFontHeight(20);

    // Second portion: bold red text
    Portion portion2 = new Portion("bold red text");
    portion2.getPortionFormat().setFontHeight(20);
    portion2.getPortionFormat().setFontBold(NullableBool.TRUE);
    portion2.getPortionFormat().getFillFormat().setFillType(FillType.SOLID);
    portion2.getPortionFormat().getFillFormat().getSolidFillColor().setColor(
        Color.fromArgb(255, 200, 0, 0)
    );
    paragraph.getPortions().add(portion2);

    prs.save("mixed-format.pptx", SaveFormat.PPTX);
}

المشكلات الشائعة والحلول

النص يظهر باللون الأسود حتى بعد ضبط اللون

تأكد getFillFormat().setFillType(FillType.SOLID) يتم استدعاؤه قبل تعيين اللون. بدون ضبط نوع التعبئة، قد لا يكون لتغيير اللون أي تأثير.

NullableBool.TRUE مقابل true

portionFormat.setFontBold() يتوقع NullableBool.TRUE, ليس Java’s true. تمرير قيمة منطقية سيسبّب خطأ تجميع لأن الطريقة تتوقع الـ NullableBool enum.

الخط لا يظهر في الملف المحفوظ

ال setLatinFont() الطريقة تحدد عائلة الخط اللاتيني. إذا لم يتم تحديدها، يُستخدم خط سمة العرض. يجب أن تكون الخطوط المخصصة مدمجة أو متوفرة على جهاز العرض.


الأسئلة المتكررة

كيف يمكنني تغيير عائلة الخط؟?

تعيين portionFormat.setLatinFont():

fmt.setLatinFont(new FontData("Arial"));

FontData يقبل اسم عائلة الخط كسلسلة نصية.

كيف يمكنني ضبط محاذاة الفقرة؟?

استخدم paragraphFormat.setAlignment():

import org.aspose.slides.foss.TextAlignment;

tf.getParagraphs().get(0).getParagraphFormat()
    .setAlignment(TextAlignment.CENTER);

القيم المدعومة: LEFT, CENTER, RIGHT, JUSTIFY.

كيف يمكنني ضبط تباعد الأسطر؟?

استخدم paragraphFormat.setSpaceBefore() (نقاط قبل الفقرة) أو paragraphFormat.setSpaceAfter() (نقاط بعد الفقرة):

tf.getParagraphs().get(0).getParagraphFormat().setSpaceBefore(12);  // 12pt before
tf.getParagraphs().get(0).getParagraphFormat().setSpaceAfter(6);    // 6pt after

انظر أيضًا

 العربية