OLE kezelése prezentációkban Java-val
Bevezetés
Tekintsd meg az MS Excelben létrehozott diagramot. A diagramot ezután egy PowerPoint diára helyezik. Ez az Excel-diagram OLE objektumnak számít.
- Egy OLE objektum megjelenhet ikonként. Ebben az esetben, ha duplán kattintasz az ikonra, a diagram a kapcsolódó alkalmazásban (Excel) nyílik meg, vagy felkérnek egy alkalmazás kiválasztására az objektum megnyitásához vagy szerkesztéséhez.
- Egy OLE objektum megjelenítheti a tényleges tartalmát, például egy diagram tartalmát. Ebben az esetben a diagram a PowerPointban aktiválódik, a diagram felület betöltődik, és a diagram adatainak módosítását a PowerPointon belül végezheted.
Aspose.Slides for Java lehetővé teszi OLE objektumok beillesztését a diákba OLE objektumkeretként (OleObjectFrame).
OLE objektumkeretek hozzáadása a diákhoz
Tegyük fel, hogy már létrehoztál egy diagramot a Microsoft Excelben, és szeretnéd beágyazni azt a diára OLE objektumkeretként az Aspose.Slides for Java használatával, ezt a módot követheted:
- Hozz létre egy példányt a Presentation osztályból.
- Szerezd meg egy dia referenciaját az indexe alapján.
- Olvasd be az Excel-fájlt bájt tömbként.
- Adj hozzá egy OleObjectFrame objektumot a diához, amely tartalmazza a bájt tömböt és az OLE objektummal kapcsolatos egyéb információkat.
- Írd ki a módosított prezentációt PPTX fájlként.
Az alábbi példában egy Excel-fájlból származó diagramot adtunk hozzá egy diához OLE objektumkeretként az Aspose.Slides for Java használatával. Megjegyzés hogy a OleEmbeddedDataInfo konstruktor második paraméterként egy beágyazható objektumkiterjesztést vár. Ez a kiterjesztés lehetővé teszi a PowerPoint számára, hogy helyesen értelmezze a fájltípust és a megfelelő alkalmazást válassza az OLE objektum megnyitásához.
Presentation presentation = new Presentation();
Dimension2D slideSize = presentation.getSlideSize().getSize();
ISlide slide = presentation.getSlides().get_Item(0);
// Az OLE objektum adatainak előkészítése.
byte[] fileData = Files.readAllBytes(Paths.get("book.xlsx"));
IOleEmbeddedDataInfo dataInfo = new OleEmbeddedDataInfo(fileData, "xlsx");
// OLE objektumkeret hozzáadása a diához.
slide.getShapes().addOleObjectFrame(0, 0, (float)slideSize.getWidth(), (float)slideSize.getHeight(), dataInfo);
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
Kapcsolt OLE objektumkeretek hozzáadása
Az Aspose.Slides for Java lehetővé teszi, hogy egy OleObjectFrame objektumot adjunk hozzá adatbeágyazás nélkül, csak a fájlra mutató hivatkozással.
Ez a Java kód megmutatja, hogyan adhatunk egy OleObjectFrame objektumot kapcsolt Excel fájllal egy diára:
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
// OLE objektumkeret hozzáadása egy kapcsolt Excel fájllal.
slide.getShapes().addOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
OLE objektumkeretek elérése
Ha egy OLE objektum már be van ágyazva egy diára, egyszerűen megtalálhatod vagy elérheted a következő módon:
- Tölts be egy prezentációt, amely az beágyazott OLE objektumot tartalmaz, a Presentation osztály példányosításával.
- Szerezd meg a dia referenciáját az indexének használatával.
- Érd el az OleObjectFrame alakzatot. A példánkban a korábban létrehozott PPTX-et használtuk, amelynek az első dián csak egy alakzata van. Ezután cast-oltuk azt az objektumot egy IOleObjectFrame típusra. Ez lett a kívánt OLE objektumkeret, amelyet el kell érni.
- Miután az OLE objektumkeretet elérted, bármilyen műveletet végrehajthatsz rajta.
Az alábbi példában egy OLE objektumkeretet (egy Excel-diagram objektumot, amely egy diára van beágyazva) és az annak a fájladatait érjük el.
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
// A beágyazott fájl adatait kapja meg.
byte[] fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
// A beágyazott fájl kiterjesztését kapja meg.
String fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
// ...
}
Kapcsolt OLE objektumkeret tulajdonságainak elérése
Az Aspose.Slides lehetővé teszi a kapcsolt OLE objektumkeret tulajdonságainak elérését.
Ez a Java kód megmutatja, hogyan ellenőrizheted, hogy egy OLE objektum kapcsolt-e, és hogyan szerezheted meg a kapcsolt fájl elérési útját:
Presentation presentation = new Presentation("sample.ppt");
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
// Ellenőrizze, hogy az OLE objektum kapcsolt-e.
if (oleFrame.isObjectLink()) {
// Kiírja a kapcsolt fájl teljes útvonalát.
System.out.println("OLE object frame is linked to: " + oleFrame.getLinkPathLong());
// Kiírja a kapcsolt fájl relatív útvonalát, ha van.
// Csak a PPT prezentációk tartalmazhatják a relatív útvonalat.
if (oleFrame.getLinkPathRelative() != null && !oleFrame.getLinkPathRelative().isEmpty()) {
System.out.println("OLE object frame relative path: " + oleFrame.getLinkPathRelative());
}
}
}
presentation.dispose();
OLE objektum adatának módosítása
Ha egy OLE objektum már be van ágyazva egy diára, egyszerűen elérheted azt az objektumot és módosíthatod az adatait a következő módon:
- Tölts be egy prezentációt, amely beágyazott OLE objektumot tartalmaz, a Presentation osztály példányosításával.
- Szerezd meg a dia referenciáját az indexével.
- Érd el az OLE objektumkeret alakzatot. A példánkban a korábban létrehozott PPTX-et használtuk, amelynek az első dián egy alakzata van. Ezután cast-oltuk azt az objektumot egy IOleObjectFrame típusra. Ez lett a kívánt OLE objektumkeret, amelyet el kell érni.
- Miután az OLE objektumkeretet elérted, bármilyen műveletet végrehajthatsz rajta.
- Hozz létre egy
Workbookobjektumot és érj hozzá az OLE adatokhoz. - Érd el a kívánt
Worksheet-et és módosítsd az adatokat. - Mentsd a frissített
Workbook-ot egy stream-be. - Változtasd meg az OLE objektum adatait a stream alapján.
Az alábbi példában egy OLE objektumkeretet (egy Excel-diagram objektumot, amely egy diára van beágyazva) érünk el, és a fájladatait módosítjuk a diagram adatok frissítéséhez.
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
ByteArrayInputStream oleStream = new ByteArrayInputStream(oleFrame.getEmbeddedData().getEmbeddedFileData());
// Olvassa be az OLE objektum adatát Workbook objektumként.
Workbook workbook = new Workbook(oleStream);
ByteArrayOutputStream newOleStream = new ByteArrayOutputStream();
// Módosítsa a workbook adatokat.
workbook.getWorksheets().get(0).getCells().get(0, 4).putValue("E");
workbook.getWorksheets().get(0).getCells().get(1, 4).putValue(12);
workbook.getWorksheets().get(0).getCells().get(2, 4).putValue(14);
workbook.getWorksheets().get(0).getCells().get(3, 4).putValue(15);
OoxmlSaveOptions fileOptions = new OoxmlSaveOptions(com.aspose.cells.SaveFormat.XLSX);
workbook.save(newOleStream, fileOptions);
// Módosítsa az OLE keret objektum adatait.
IOleEmbeddedDataInfo newData = new OleEmbeddedDataInfo(newOleStream.toByteArray(), oleFrame.getEmbeddedData().getEmbeddedFileExtension());
oleFrame.setEmbeddedData(newData);
}
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
Más fájltípusok beágyazása a diákba
Az Excel-diagramok mellett az Aspose.Slides for Java lehetővé teszi más típusú fájlok beágyazását a diákba. Például HTML, PDF és ZIP fájlokat is beilleszthetsz objektumként. Amikor a felhasználó duplán kattint a beillesztett objektumra, az automatikusan megnyílik a megfelelő programban, vagy a felhasználót felszólítja a megfelelő program kiválasztására.
Ez a Java kód megmutatja, hogyan ágyazz be HTML-t és ZIP-et egy diára:
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
byte[] htmlData = Files.readAllBytes(Paths.get("sample.html"));
IOleEmbeddedDataInfo htmlDataInfo = new OleEmbeddedDataInfo(htmlData, "html");
IOleObjectFrame htmlOleFrame = slide.getShapes().addOleObjectFrame(150, 120, 50, 50, htmlDataInfo);
htmlOleFrame.setObjectIcon(true);
byte[] zipData = Files.readAllBytes(Paths.get("sample.zip"));
IOleEmbeddedDataInfo zipDataInfo = new OleEmbeddedDataInfo(zipData, "zip");
IOleObjectFrame zipOleFrame = slide.getShapes().addOleObjectFrame(150, 220, 50, 50, zipDataInfo);
zipOleFrame.setObjectIcon(true);
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
Beágyazott objektumok fájltípusának beállítása
Prezentációk kezelése során előfordulhat, hogy el kell cserélni a régi OLE objektumokat újakra, vagy egy nem támogatott OLE objektumot egy támogatottra. Az Aspose.Slides for Java lehetővé teszi, hogy beállítsd a beágyazott objektum fájltípusát, így frissítheted az OLE keret adatát vagy annak kiterjesztését.
Ez a Java kód megmutatja, hogyan állítható be a beágyazott OLE objektum fájltípusa zip-re:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IOleObjectFrame oleFrame = (IOleObjectFrame) slide.getShapes().get_Item(0);
String fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
byte[] fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
System.out.println("Current embedded file extension is: " + fileExtension);
// A fájltípus módosítása ZIP-re.
oleFrame.setEmbeddedData(new OleEmbeddedDataInfo(fileData, "zip"));
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
Ikon képek és címek beállítása beágyazott objektumokhoz
Az OLE objektum beágyazása után automatikusan hozzáadódik egy előnézet, amely egy ikon képből áll. Ez az előnézet az, amit a felhasználók látnak, mielőtt elérnék vagy megnyitnák az OLE objektumot. Ha egy adott képet és szöveget szeretnél használni az előnézet elemeiként, az ikon képet és a címet az Aspose.Slides for Java segítségével állíthatod be.
Ez a Java kód megmutatja, hogyan állítható be az ikon kép és a cím egy beágyazott objektumhoz:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IOleObjectFrame oleFrame = (IOleObjectFrame) slide.getShapes().get_Item(0);
// Kép hozzáadása a prezentáció erőforrásaihoz.
byte[] imageData = Files.readAllBytes(Paths.get("image.png"));
IPPImage oleImage = presentation.getImages().addImage(imageData);
// Set a title and the image for the OLE preview.
oleFrame.setSubstitutePictureTitle("My title");
oleFrame.getSubstitutePictureFormat().getPicture().setImage(oleImage);
oleFrame.setObjectIcon(true);
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
Az OLE objektumkeret átméretezésének és áthelyezésének megakadályozása
Miután egy kapcsolt OLE objektumot hozzáadtál egy prezentációs diához, a PowerPointban való megnyitáskor megjelenhet egy üzenet, amely a linkek frissítésére kér. Az “Update Links” gomb megnyomása módosíthatja az OLE objektumkeret méretét és pozícióját, mivel a PowerPoint frissíti a kapcsolt OLE objektum adatait és frissíti az objektum előnézetét. Ahhoz, hogy a PowerPoint ne kérje az objektum adatainak frissítését, állítsd a setUpdateAutomatic metódust a IOleObjectFrame interfészen false értékre:
oleFrame.setUpdateAutomatic(false);
Beágyazott fájlok kinyerése
Az Aspose.Slides for Java lehetővé teszi a diákba beágyazott fájlok OLE objektumokként történő kinyerését a következő módon:
- Hozz létre egy példányt a Presentation osztályból, amely a kinyerni kívánt OLE objektumokat tartalmazza.
- Iterálj végig a prezentáció összes alakzatán és érj hozzá a OLEObjectFrame alakzatokhoz.
- Érd el a beágyazott fájlok adatait az OLE objektumkeretekből és írd őket lemezre.
Ez a Java kód megmutatja, hogyan nyerhetők ki a diára beágyazott fájlok OLE objektumként:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
for (int index = 0; index < slide.getShapes().size(); index++) {
IShape shape = slide.getShapes().get_Item(index);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
byte[] fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
String fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
Path filePath = Paths.get("OLE_object_" + index + fileExtension);
Files.write(filePath, fileData);
}
}
presentation.dispose();
FAQ
Megjelenik-e az OLE tartalom a diák PDF/reprezentációkba történő exportálásakor?
A dián látható elem kerül renderelésre – az ikon/helyettesítő kép (előnézet). Az „élő” OLE tartalom nem kerül végrehajtásra a renderelés során. Szükség esetén állíts be saját előnézeti képet, hogy a várt megjelenés biztosítva legyen az exportált PDF-ben.
Hogyan zárolhatom egy OLE objektumot a dián, hogy a felhasználók ne mozgathassák/szerkeszthessék azt PowerPointban?
Zárold le az alakzatot: az Aspose.Slides alakzatszintű zárakat kínál. Ez nem titkosítás, de hatékonyan megakadályozza a véletlen szerkesztéseket és áthelyezéseket.
Miért „ugrik” vagy változik mérete a kapcsolt Excel objektum, amikor megnyitom a prezentációt?
A PowerPoint frissítheti a kapcsolt OLE előnézetét. A stabil megjelenés érdekében kövesd a Működő megoldást a munkalap átméretezéséhez gyakorlatait – vagy illeszd a keretet a tartományhoz, vagy méretezd a tartományt egy rögzített keretre, és állíts be megfelelő helyettesítő képet.
Megmaradnak-e a kapcsolt OLE objektumok relatív útvonalai a PPTX formátumban?
A PPTX-ben a „relatív útvonal” információ nem érhető el – csak a teljes útvonal. A relatív útvonalak a régebbi PPT formátumban találhatók. A hordozhatóság érdekében részesítsd előnyben a megbízható abszolút útvonalakat/hozzáférhető URI‑kat vagy a beágyazást.