OLE kezelése prezentációkban JavaScript segítségével
Bevezetés
Tekintsünk egy az MS Excelben létrehozott diagramot. A diagramot ezután egy PowerPoint‑diára helyezzük. Ez az Excel‑diagram OLE objektumnak tekinthető.
- Egy OLE objektum ikonként jelenhet meg. Ebben az esetben, ha duplán kattintunk az ikonra, a diagram a kapcsolódó alkalmazásban (Excel) nyílik meg, vagy a felhasználó felkeresi a megnyitáshoz vagy szerkesztéshez megfelelő alkalmazást.
- Egy OLE objektum megjelenítheti tényleges tartalmát, például egy diagram adatait. Ebben az esetben a diagram aktiválódik a PowerPointben, a diagram felülete betöltődik, és a diagram adatait közvetlenül a PowerPointen belül módosíthatjuk.
Aspose.Slides Node.js-hez Java-n keresztül 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étrehozott egy diagramot a Microsoft Excelben, és azt OLE objektumkeretként szeretné beágyazni egy diára az Aspose.Slides Node.js-hez Java-n keresztül, ezt a módot követve:
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg a dia hivatkozását az indexe alapján.
- Olvassa be az Excel‑fájlt bájt‑tömbként.
- Adja hozzá az OleObjectFrame keretet a diához, amely a bájt‑tömböt és az OLE objektum egyéb adatait tartalmazza.
- Írja 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á a diához OLE objektumkeretként az Aspose.Slides Node.js-hez Java-n keresztül.
Megjegyzés hogy az OleEmbeddedDataInfo konstruktor második paraméterként egy beágyazható objektum kiterjeszté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.
var presentation = new asposeSlides.Presentation();
var slideSize = presentation.getSlideSize().getSize();
var slide = presentation.getSlides().get_Item(0);
// Készítse elő az OLE objektum adatait.
var oleStream = fs.readFileSync("book.xlsx");
var fileData = Array.from(oleStream);
var dataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", fileData), "xlsx");
// Adja hozzá az OLE objektumkeretet a diához.
slide.getShapes().addOleObjectFrame(0, 0, slideSize.getWidth(), slideSize.getHeight(), dataInfo);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Linkelt OLE objektumkeretek hozzáadása
Az Aspose.Slides Node.js-hez Java-n keresztül lehetővé teszi egy OleObjectFrame hozzáadását anélkül, hogy az adatot beágyazná, csak a fájlra mutató hivatkozással.
Az alábbi JavaScript‑kód bemutatja, hogyan adhat hozzá egy OleObjectFrame keretet egy linkelt Excel‑fájllal a diára:
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
// OLE objektumkeret hozzáadása egy linkelt Excel-fájllal.
slide.getShapes().addOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
OLE objektumkeretek elérése
Ha egy OLE objektum már be van ágyazva egy diára, egyszerűen megtalálhatja vagy elérheti a következő módon:
- Töltsön be egy prezentációt, amely tartalmazza a beágyazott OLE objektumot, a Presentation osztály példányosításával.
- Szerezze meg a dia hivatkozását az indexe alapján.
- Érje el az OleObjectFrame alakzatot. Példánkban az előzőleg létrehozott PPTX‑et használtuk, amelyen az első dián csak egy alakzat van.
- Miután elérte az OLE objektumkeretet, tetszőleges műveletet végrehajthat rajta.
Az alábbi példában egy OLE objektumkeretet (egy diára beágyazott Excel‑diagramot) és annak fájladatait érjük el.
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
// Szerezze meg a beágyazott fájl adatait.
// Szerezze meg a beágyazott fájl kiterjesztését.
// ...
}
Linkelt OLE objektumkeret tulajdonságainak elérése
Az Aspose.Slides lehetővé teszi a linkelt OLE objektumkeret tulajdonságainak elérését.
Az alábbi JavaScript‑kód megmutatja, hogyan ellenőrizhető, hogy egy OLE objektum linkelt-e, és hogyan kérhető le a linkelt fájl elérési útja:
var presentation = new asposeSlides.Presentation("sample.ppt");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
// Ellenőrizze, hogy az OLE objektum linkelt-e.
if (oleFrame.isObjectLink()) {
// Írja ki a linkelt fájl teljes útvonalát.
console.log("OLE object frame is linked to:", oleFrame.getLinkPathLong());
// Írja ki a linkelt fájl relatív útvonalát, ha létezik.
// Csak a PPT prezentációk tartalmazhatják a relatív útvonalat.
if (oleFrame.getLinkPathRelative() != null && oleFrame.getLinkPathRelative() != "") {
console.log("OLE object frame relative path:", oleFrame.getLinkPathRelative());
}
}
}
presentation.dispose();
OLE objektum adatainak módosítása
Ha egy OLE objektum már be van ágyazva egy diára, egyszerűen elérheti azt, és a következő lépésekkel módosíthatja az adatokat:
- Töltsön be egy prezentációt, amely tartalmazza a beágyazott OLE objektumot, a Presentation osztály példányosításával.
- Szerezze meg a dia hivatkozását az indexe alapján.
- Érje el az OLE objektumkeret alakzatot. Példánkban az előzőleg létrehozott PPTX‑et használtuk, amelyen az első dián egy alakzat van.
- Miután elérte az OLE objektumkeretet, tetszőleges műveletet végrehajthat rajta.
- Hozzon létre egy
Workbookpéldányt, és érje el az OLE adatokat. - Nyissa meg a kívánt
Worksheet‑et, és módosítsa az adatokat. - Mentse a frissített
Workbook‑ot egy áramlatba. - Cserélje ki az OLE objektum adatait az áramlatból.
Az alábbi példában egy OLE objektumkeretet (egy diára beágyazott Excel‑diagramot) érünk el, és módosítjuk a fájladatait, hogy a diagram adatai frissüljenek.
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
var oleStream = java.newInstanceSync("java.io.ByteArrayInputStream", oleFrame.getEmbeddedData().getEmbeddedFileData());
// Olvassa be az OLE objektum adatát Workbook objektumként.
var workbook = java.newInstanceSync("Workbook", oleStream);
var newOleStream = java.newInstanceSync("java.io.ByteArrayOutputStream");
// Módosítsa a munkafüzet adatait.
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);
var fileOptions = java.newInstanceSync("OoxmlSaveOptions", java.getStaticFieldValue("com.aspose.cells.SaveFormat", "XLSX"));
workbook.save(newOleStream, fileOptions);
// Módosítsa az OLE keret objektum adatait.
var newData = new asposeSlides.OleEmbeddedDataInfo(newOleStream.toByteArray(), oleFrame.getEmbeddedData().getEmbeddedFileExtension());
oleFrame.setEmbeddedData(newData);
newOleStream.close();
oleStream.close();
}
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Más fájltípusok beágyazása a diákba
Az Excel‑diagramokon túl az Aspose.Slides Node.js-hez Java-n keresztül lehetővé teszi más fájltípusok beágyazását is. Például HTML, PDF és ZIP fájlokat szúrhat be objektumként. Amikor a felhasználó duplán kattint a beillesztett objektumra, az automatikusan megnyílik a megfelelő programban, vagy a felhasználó felkeresi a megfelelő programot a megnyitáshoz.
Az alábbi JavaScript‑kód bemutatja, hogyan ágyazhat be HTML‑t és ZIP‑et egy diára:
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
var htmlBuffer = fs.readFileSync("sample.html");
var htmlData = Array.from(htmlBuffer);
var htmlDataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", htmlData), "html");
var htmlOleFrame = slide.getShapes().addOleObjectFrame(150, 120, 50, 50, htmlDataInfo);
htmlOleFrame.setObjectIcon(true);
var zipBuffer = fs.readFileSync("sample.zip");
var zipData = Array.from(zipBuffer);
var zipDataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", zipData), "zip");
var zipOleFrame = slide.getShapes().addOleObjectFrame(150, 220, 50, 50, zipDataInfo);
zipOleFrame.setObjectIcon(true);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Beágyazott objektumok fájltípusának beállítása
Prezentációk kezelésekor előfordulhat, hogy régi OLE objektumokat újakkal kell helyettesíteni, vagy egy nem támogatott OLE objektumot támogatottal kell cserélni. Az Aspose.Slides Node.js-hez Java-n keresztül beállíthatja a beágyazott objektum fájltípusát, így frissítheti az OLE keret adatait vagy annak kiterjesztését.
Az alábbi JavaScript‑kód megmutatja, hogyan állítható be a beágyazott OLE objektum fájltípusa zip‑re:
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
var oleFileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
console.log("Current embedded file extension is:", fileExtension);
// Change the file type to ZIP.
var fileData = java.newArray("byte", Array.from(oleFileData));
oleFrame.setEmbeddedData(new asposeSlides.OleEmbeddedDataInfo(fileData, "zip"));
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Ikonképek és címek beállítása beágyazott objektumokhoz
Egy OLE objektum beágyazása után automatikusan hozzáadódik egy előnézet, amely egy ikonképet tartalmaz. Ez az előnézet jelenik meg a felhasználók számára, mielőtt elérnék vagy megnyitnák az OLE objektumot. Ha egy konkrét képet és szöveget szeretne használni az előnézetben, akkor beállíthatja az ikonképet és a címet az Aspose.Slides Node.js-hez Java-n keresztül.
Az alábbi JavaScript‑kód megmutatja, hogyan állítható be az ikonkép és a cím egy beágyazott objektumhoz:
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
// Kép hozzáadása a prezentáció erőforrásaihoz.
var image = asposeSlides.Images.fromFile("image.png");
var oleImage = presentation.getImages().addImage(image);
image.dispose();
// Állítson be címet és képet az OLE előnézethez.
oleFrame.setSubstitutePictureTitle("My title");
oleFrame.getSubstitutePictureFormat().getPicture().setImage(oleImage);
oleFrame.setObjectIcon(true);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Az OLE objektumkeret átméretezésének és áthelyezésének megakadályozása
Miután egy linkelt OLE objektumot hozzáadott egy prezentációs diahoz, a PowerPoint megnyitásakor megjelenhet egy üzenet, amely a hivatkozások frissítését kéri. Az „Update Links” gombra kattintva a PowerPoint frissíti a linkelt OLE objektum adatait, ami a keret méretének és pozíciójának változását eredményezheti. Annak érdekében, hogy a PowerPoint ne kérje az objektum adatainak frissítését, használja az OleObjectFrame osztály setUpdateAutomatic metódusát false értékkel:
oleFrame.setUpdateAutomatic(false);
Beágyazott fájlok kinyerése
Az Aspose.Slides Node.js-hez Java-n keresztül a következő módon nyerheti ki a diákba beágyazott OLE objektumként tárolt fájlokat:
- Hozzon létre egy példányt a Presentation osztályból, amely a kinyerni kívánt OLE objektumokat tartalmazza.
- Iteráljon végig a prezentáció összes alakzatán, és érje el az OleObjectFrame alakzatokat.
- Olvassa ki a beágyazott fájlok adatait az OLE objektumkeretekből, és írja őket lemezre.
Az alábbi JavaScript‑kód megmutatja, hogyan nyerhet ki fájlokat, amelyeket egy dia OLE objektumként tartalmaz:
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
for (var index = 0; index < slide.getShapes().size(); index++) {
var shape = slide.getShapes().get_Item(index);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
var fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
var filePath = "OLE_object_" + index + fileExtension;
fs.writeFileSync(filePath, Buffer.from(fileData));
}
}
presentation.dispose();
GYIK
Megjelenik-e az OLE tartalom, ha a diákat PDF‑re/képre exportáljuk?
A dián látható elemek (az ikon vagy helyettesítő kép) kerülnek renderelésre. A „valódi” OLE tartalom nem fut le a renderelés során. Szükség esetén állítson be saját előnézeti képet, hogy a várt megjelenés megjelenjen az exportált PDF‑ben.
Hogyan lehet zárolni egy OLE objektumot a dián, hogy a felhasználók ne mozgassák vagy szerkesszék PowerPointban?
Zárolja az alakzatot: az Aspose.Slides alakzatszintű zárolásokat biztosít. Ez nem titkosítás, de hatékonyan megakadályozza a véletlen szerkesztéseket és áthelyezéseket.
Megmaradnak-e a relatív elérési utak a linkelt OLE objektumoknál a PPTX formátumban?
A PPTX‑ben nincs „relatív útvonal” információ – csak a teljes útvonal tárolódik. A relatív utak a régebbi PPT formátumban találhatók. Az áthelyezhetőség érdekében részesítsen előnyben megbízható abszolút útvonalakat vagy elérhető URI‑kat, vagy használja a beágyazást.