Správa OLE v prezentacích pomocí JavaScriptu
Úvod
Uvažujme o grafu vytvořeném v MS Excel. Tento graf je následně umístěn do snímku PowerPointu. Tento graf z Excelu je považován za OLE objekt.
- OLE objekt se může zobrazit jako ikona. V tom případě, když na ikonu dvojkliknete, graf se otevře v příslušné aplikaci (Excel), nebo budete vyzváni k výběru aplikace pro otevření či úpravu objektu.
- OLE objekt může zobrazit svůj skutečný obsah, například obsah grafu. V tom případě je graf aktivován v PowerPointu, načte se rozhraní grafu a můžete upravovat data grafu přímo v PowerPointu.
Aspose.Slides for Node.js via Java vám umožňuje vkládat OLE objekty do snímků jako OLE rámce objektů (OleObjectFrame).
Přidání OLE rámců objektů do snímků
Předpokládejme, že jste již vytvořili graf v Microsoft Excel a chcete jej vložit do snímku jako OLE rámec objektu pomocí Aspose.Slides for Node.js via Java, můžete tak učinit následovně:
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Načtěte soubor Excel jako pole bytů.
- Přidejte OleObjectFrame do snímku s polem bytů a dalšími informacemi o OLE objektu.
- Uložte upravenou prezentaci jako soubor PPTX.
V níže uvedeném příkladu jsme přidali graf ze souboru Excel do snímku jako OLE rámec objektu pomocí Aspose.Slides for Node.js via Java.
Poznámka že konstruktor OleEmbeddedDataInfo přijímá jako druhý parametr rozšíření vkladaného objektu. Toto rozšíření umožňuje PowerPointu správně rozpoznat typ souboru a vybrat správnou aplikaci pro otevření tohoto OLE objektu.
var presentation = new asposeSlides.Presentation();
var slideSize = presentation.getSlideSize().getSize();
var slide = presentation.getSlides().get_Item(0);
// Připravte data pro OLE objekt.
var oleStream = fs.readFileSync("book.xlsx");
var fileData = Array.from(oleStream);
var dataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", fileData), "xlsx");
// Přidejte OLE rámec objektu do snímku.
slide.getShapes().addOleObjectFrame(0, 0, slideSize.getWidth(), slideSize.getHeight(), dataInfo);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Přidání propojených OLE rámců objektů
Aspose.Slides for Node.js via Java vám umožňuje přidat OleObjectFrame bez vkládání dat, pouze s odkazem na soubor.
Tento JavaScriptový kód vám ukazuje, jak přidat OleObjectFrame s propojeným souborem Excel do snímku:
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
// Přidejte OLE rámec objektu s propojeným souborem Excel.
slide.getShapes().addOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Přístup k OLE rámcům objektů
Pokud je OLE objekt již vložen do snímku, můžete jej snadno najít nebo získat tímto způsobem:
- Načtěte prezentaci s vloženým OLE objektem vytvořením instance třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Získejte tvar OleObjectFrame. V našem příkladu jsme použili dříve vytvořený PPTX, který má na prvním snímku pouze jeden tvar.
- Jakmile je OLE rámec objektu získán, můžete s ním provádět jakékoli operace.
V níže uvedeném příkladu jsou získány OLE rámec objektu (graf Excel vložený do snímku) a jeho data souboru.
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;
// Získejte data vloženého souboru.
// Získejte příponu vloženého souboru.
// ...
}
Přístup k vlastnostem propojeného OLE rámce objektu
Aspose.Slides vám umožňuje přistupovat k vlastnostem propojených OLE rámců objektů.
Tento JavaScriptový kód vám ukazuje, jak zjistit, zda je OLE objekt propojen, a poté získat cestu k propojenému souboru:
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;
// Zkontrolujte, zda je OLE objekt propojen.
if (oleFrame.isObjectLink()) {
// Vytiskněte úplnou cestu k propojenému souboru.
console.log("OLE object frame is linked to:", oleFrame.getLinkPathLong());
// Vytiskněte relativní cestu k propojenému souboru, pokud je k dispozici.
// Pouze prezentace PPT mohou obsahovat relativní cestu.
if (oleFrame.getLinkPathRelative() != null && oleFrame.getLinkPathRelative() != "") {
console.log("OLE object frame relative path:", oleFrame.getLinkPathRelative());
}
}
}
presentation.dispose();
Změna dat OLE objektu
Pokud je OLE objekt již vložen do snímku, můžete jej snadno získat a modifikovat jeho data tímto způsobem:
- Načtěte prezentaci s vloženým OLE objektem vytvořením instance třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Získejte tvar OLE rámce objektu. V našem příkladu jsme použili dříve vytvořený PPTX, který má na prvním snímku jeden tvar.
- Jakmile je OLE rámec objektu získán, můžete s ním provádět jakékoli operace.
- Vytvořte objekt
Workbooka získejte OLE data. - Získejte požadovaný
Worksheeta upravte data. - Uložte aktualizovaný
Workbookdo proudu. - Změňte data OLE objektu z proudu.
V níže uvedeném příkladu je získán OLE rámec objektu (graf Excel vložený do snímku) a jeho data souboru jsou upravena tak, aby aktualizovala data grafu.
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());
// Přečtěte data OLE objektu jako objekt Workbook.
var workbook = java.newInstanceSync("Workbook", oleStream);
var newOleStream = java.newInstanceSync("java.io.ByteArrayOutputStream");
// Upravte data sešitu.
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);
// Změňte data objektu OLE rámce.
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();
Vkládání dalších typů souborů do snímků
Kromě grafů Excel vám Aspose.Slides for Node.js via Java umožňuje vložit do snímků i další typy souborů. Například můžete vložit soubory HTML, PDF a ZIP jako objekty. Když uživatel dvojklikne na vložený objekt, automaticky se otevře v příslušném programu nebo je uživatel vyzván k výběru vhodného programu pro jeho otevření.
Tento JavaScriptový kód vám ukazuje, jak vložit HTML a ZIP do snímku:
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();
Nastavení typů souborů pro vložené objekty
Při práci s prezentacemi může být potřeba nahradit staré OLE objekty novými nebo nahradit nepodporovaný OLE objekt podporovaným. Aspose.Slides for Node.js via Java vám umožňuje nastavit typ souboru pro vložený objekt, což umožňuje aktualizovat data OLE rámce nebo jeho příponu.
Tento JavaScriptový kód vám ukazuje, jak nastavit typ souboru pro vložený OLE objekt na zip:
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);
// Změňte typ souboru na 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();
Nastavení ikonových obrázků a názvů pro vložené objekty
Po vložení OLE objektu se automaticky přidá náhled sestávající z ikony. Tento náhled vidí uživatelé před přístupem nebo otevřením OLE objektu. Pokud chcete použít konkrétní obrázek a text jako prvky náhledu, můžete nastavit ikonu a název pomocí Aspose.Slides for Node.js via Java.
Tento JavaScriptový kód vám ukazuje, jak nastavit ikonu a název pro vložený objekt:
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
// Přidejte obrázek do zdrojů prezentace.
var image = asposeSlides.Images.fromFile("image.png");
var oleImage = presentation.getImages().addImage(image);
image.dispose();
// Nastavte název a obrázek pro náhled OLE.
oleFrame.setSubstitutePictureTitle("My title");
oleFrame.getSubstitutePictureFormat().getPicture().setImage(oleImage);
oleFrame.setObjectIcon(true);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Zabránění změně velikosti a pozice OLE rámce objektu
Po přidání propojeného OLE objektu do snímku prezentace, když otevřete prezentaci v PowerPointu, můžete obdržet zprávu s výzvou k aktualizaci odkazů. Kliknutí na tlačítko „Update Links“ může změnit velikost a pozici OLE rámce objektu, protože PowerPoint aktualizuje data z propojeného OLE objektu a obnoví náhled objektu. Chcete‑li zabránit výzvě PowerPointu k aktualizaci dat objektu, použijte metodu setUpdateAutomatic třídy OleObjectFrame s hodnotou false:
oleFrame.setUpdateAutomatic(false);
Extrahování vložených souborů
Aspose.Slides for Node.js via Java vám umožňuje extrahovat soubory vložené do snímků jako OLE objekty tímto způsobem:
- Vytvořte instanci třídy Presentation obsahující OLE objekty, které chcete extrahovat.
- Procházejte všechny tvary v prezentaci a přistupujte k tvarům OLEObjectFrame.
- Získejte data vložených souborů z OLE rámců objektů a zapište je na disk.
Tento JavaScriptový kód vám ukazuje, jak extrahovat soubory vložené do snímku jako OLE objekty:
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();
Často kladené otázky
Bude OLE obsah vykreslen při exportu snímků do PDF/obrázků?
To, co je na snímku viditelné, je vykresleno – ikona/náhradní obrázek (náhled). „Živý“ OLE obsah není při vykreslování spuštěn. V případě potřeby nastavte vlastní obrázek náhledu, aby se v exportovaném PDF zobrazoval očekávaný vzhled.
Jak mohu zamknout OLE objekt na snímku, aby jej uživatelé nemohli v PowerPointu přesouvat/upravovat?
Zamkněte tvar: Aspose.Slides poskytuje zamykání na úrovni tvaru. Nejde o šifrování, ale účinně zabraňuje nechtěným úpravám a přesunu.
Zůstanou relativní cesty pro propojené OLE objekty zachovány ve formátu PPTX?
Ve formátu PPTX informace o „relativní cestě“ nejsou k dispozici – pouze úplná cesta. Relativní cesty se vyskytují ve starším formátu PPT. Pro přenositelnost upřednostněte spolehlivé absolutní cesty/přístupné URI nebo vkládání.