چگونه اشکال را به پاورپوینت در جاوا اضافه کنیم
Aspose.Slides FOSS for Java از افزودن AutoShapes، Tables، Connectors و PictureFrames به اسلایدهای ارائه پشتیبانی میکند. تمام انواع شکلها از طریق مجموعه slide.getShapes() اضافه میشوند.
راهنمای گام به گام
مرحله 1: افزودن وابستگی Maven
<dependency>
<groupId>org.aspose.slides.foss</groupId>
<artifactId>aspose-slides-foss</artifactId>
<version>1.0.0</version>
</dependency>مرحله ۲: ایجاد یک ارائه
همیشه از 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);
}مرحله ۳: افزودن 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);
}مرحله ۴: افزودن جدول
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: افزودن یک کانکتور
اتصالات دو شکل را به صورت بصری به هم متصل میکنند. ابتدا شکلها را ایجاد کنید، سپس یک اتصال اضافه کنید و نقاط اتصال شروع و پایان آن را تنظیم کنید.
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 شمارهگذاری میشوند: top=0، left=1، bottom=2، right=3.
مرحله 6: افزودن قاب تصویر
یک تصویر را جاسازی کنید و به اسلاید به عنوان 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 را ایجاد میکنند.