كيفية تنسيق النص في جافا
توفر Aspose.Slides FOSS for Java تنسيق نص دقيق من خلال الفئة PortionFormat. الـ Portion هو أصغر وحدة مستقلة من النص؛ وهو يطابق تشغيل تنسيق واحد داخل الفقرة. يوضح هذا الدليل كيفية تطبيق تنسيق الغامق والمائل وحجم الخط واللون على النص في عرض تقديمي.
دليل خطوة بخطوة
الخطوة 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يحتوي TextFrame على قائمة من كائنات Paragraph (tf.getParagraphs()). كل Paragraph يحتوي على كائنات Portion (paragraph.getPortions()).
الخطوة 4: تطبيق التنسيق الغامق والمائل
استخدم portionFormat.setFontBold() و portionFormat.setFontItalic(). تقبل هذه الأساليب NullableBool.TRUE أو NullableBool.FALSE أو NullableBool.NOT_DEFINED (موروثة من master).
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، وليس true الخاص بجافا. تمرير قيمة منطقية سيتسبب في خطأ تجميع لأن الطريقة تتوقع تعداد NullableBool.
الخط لا يظهر في الملف المحفوظ
طريقة 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