كيفية إضافة الأشكال إلى PowerPoint في Java
Aspose.Slides FOSS for Java supports adding AutoShapes, Tables, Connectors, and PictureFrames to presentation slides. All shape types are added through the slide.getShapes() مجموعة.
دليل خطوة بخطوة
الخطوة 1: إضافة تبعية Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>الخطوة 2: إنشاء عرض تقديمي
استخدم دائمًا try-with-resources لإدارة الموارد.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
// ... add shapes ...
prs.save("output.pptx", SaveFormat.PPTX);
}الخطوة 3: إضافة AutoShape
slide.getShapes().addAutoShape(shapeType, x, y, width, height) يضع شكلاً في الموضع والحجم المحددين (جميعها بالنقاط). استخدم ShapeType ثوابت لاختيار الشكل.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
// Rectangle
IAutoShape rect = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 50, 300, 100
);
rect.addTextFrame("Rectangle shape");
// Ellipse
IAutoShape ellipse = slide.getShapes().addAutoShape(
ShapeType.ELLIPSE, 400, 50, 200, 100
);
ellipse.addTextFrame("Ellipse shape");
prs.save("autoshapes.pptx", SaveFormat.PPTX);
}الخطوة 4: إضافة جدول
slide.getShapes().addTable(x, y, colWidths, rowHeights) ينشئ جدولًا في الموضع المحدد. عرض الأعمدة وارتفاع الصفوف هي مصفوفات من قيم النقاط.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
double[] colWidths = {150.0, 150.0, 150.0};
double[] rowHeights = {40.0, 40.0, 40.0};
ITable table = slide.getShapes().addTable(50, 200, colWidths, rowHeights);
// Set header row text
String[] headers = {"Product", "Units", "Revenue"};
for (int col = 0; col < headers.length; col++) {
table.getRows().get(0).get(col).getTextFrame().setText(headers[col]);
}
// Set data rows
String[][] rows = {
{"Widget A", "120", "$2,400"},
{"Widget B", "85", "$1,700"},
};
for (int row = 0; row < rows.length; row++) {
for (int col = 0; col < rows[row].length; col++) {
table.getRows().get(row + 1).get(col)
.getTextFrame().setText(rows[row][col]);
}
}
prs.save("table.pptx", SaveFormat.PPTX);
}الخطوة 5: إضافة Connector
Connectors تربط شكلين بصريًا. أنشئ الأشكال أولاً، ثم أضف Connector وحدد نقاط الاتصال البداية والنهاية.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
try (Presentation prs = new Presentation()) {
ISlide slide = prs.getSlides().get(0);
IAutoShape box1 = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 50, 100, 150, 60
);
box1.addTextFrame("Start");
IAutoShape box2 = slide.getShapes().addAutoShape(
ShapeType.RECTANGLE, 350, 100, 150, 60
);
box2.addTextFrame("End");
IConnector conn = slide.getShapes().addConnector(
ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
);
conn.setStartShapeConnectedTo(box1);
conn.setStartShapeConnectionSiteIndex(3); // right side of box1
conn.setEndShapeConnectedTo(box2);
conn.setEndShapeConnectionSiteIndex(1); // left side of box2
prs.save("connector.pptx", SaveFormat.PPTX);
}مؤشرات مواقع الاتصال مرقمة من 0 إلى 3 للمستطيل: الأعلى=0، اليسار=1، الأسفل=2، اليمين=3.
الخطوة 6: إضافة Picture Frame
أدخل صورة وأضفها إلى الشريحة كـ PictureFrame. اقرأ بايتات الصورة أولاً، أضفها إلى مجموعة صور العرض التقديمي، ثم أنشئ الإطار.
import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Paths;
try (Presentation prs = new Presentation()) {
byte[] imageData = Files.readAllBytes(Paths.get("logo.png"));
IPPImage image = prs.getImages().addImage(imageData);
ISlide slide = prs.getSlides().get(0);
slide.getShapes().addPictureFrame(
ShapeType.RECTANGLE, // bounding shape type
50, 50, // x, y in points
200, 150, // width, height in points
image
);
prs.save("with-image.pptx", SaveFormat.PPTX);
}المشكلات الشائعة والحلول
الشكل يظهر خارج منطقة الشريحة المرئية
الشرائح بحجم 720 × 540 نقطة افتراضيًا. قيم x أو y خارج تلك الحدود تضع الشكل خارج الشريحة. احتفظ x < 720 و y < 540,، وتأكد x + width <= 720 و y + height <= 540.
NullPointerException عند قراءة نص الشكل
addAutoShape() يرجع كائن الشكل مباشرة. إذا رأيت null,، تحقق من أنك لا تتجاهل قيمة الإرجاع. كما تحقق من getTextFrame() ليس null قبل قراءة النص.
نص خلية الجدول يكون فارغًا بعد التعيين
الطريقة الصحيحة هي .getTextFrame().setText(value). الوصول إلى الخلايا كـ table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").
الأسئلة المتكررة
كم عدد الأشكال التي يمكنني إضافتها إلى شريحة؟?
لا يوجد حد مفروض من المكتبة. الحدود العملية تعتمد على حجم الملف وقدرة عارض PPTX المستهدف على العرض.
هل يمكنني تغيير موضع الشكل بعد إضافته؟?
نعم. كائن الشكل الذي تم إرجاعه بواسطة addAutoShape() يحتوي على خصائص الموقع والحجم عبر getShapeFrame().
هل يتم دعم المخططات؟?
لا. المخططات، SmartArt، وكائنات OLE غير مُنفذة في هذا الإصدار وتُثير UnsupportedOperationException.