Gérer les OLE dans les présentations avec JavaScript
Introduction
Note
OLE (Object Linking & Embedding) est une technologie Microsoft qui permet aux données et aux objets créés dans une application d’être placés dans une autre application par liaison ou incorporation.Considérez un graphique créé dans MS Excel. Le graphique est ensuite placé dans une diapositive PowerPoint. Ce graphique Excel est considéré comme un objet OLE.
- Un objet OLE peut apparaître sous forme d’icône. Dans ce cas, lorsque vous double-cliquez sur l’icône, le graphique s’ouvre dans son application associée (Excel), ou il vous est demandé de sélectionner une application pour ouvrir ou modifier l’objet.
- Un objet OLE peut afficher son contenu réel, comme le contenu d’un graphique. Dans ce cas, le graphique est activé dans PowerPoint, l’interface du graphique se charge, et vous pouvez modifier les données du graphique dans PowerPoint.
Aspose.Slides for Node.js via Java vous permet d’insérer des objets OLE dans les diapositives sous forme de cadres d’objets OLE (OleObjectFrame).
Ajout de cadres d’objet OLE aux diapositives
En supposant que vous ayez déjà créé un graphique dans Microsoft Excel et que vous souhaitiez l’incorporer dans une diapositive en tant que cadre d’objet OLE à l’aide d’Aspose.Slides for Node.js via Java, vous pouvez procéder ainsi :
- Créez une instance de la classe Presentation.
- Obtenez la référence d’une diapositive via son index.
- Lisez le fichier Excel sous forme de tableau d’octets.
- Ajoutez le OleObjectFrame à la diapositive en fournissant le tableau d’octets et d’autres informations sur l’objet OLE.
- Enregistrez la présentation modifiée sous forme de fichier PPTX.
Dans l’exemple ci‑dessous, nous avons ajouté un graphique provenant d’un fichier Excel à une diapositive en tant que cadre d’objet OLE à l’aide d’Aspose.Slides for Node.js via Java.
Note que le constructeur OleEmbeddedDataInfo accepte une extension d’objet incorporable comme second paramètre. Cette extension permet à PowerPoint d’interpréter correctement le type de fichier et de choisir la bonne application pour ouvrir cet objet OLE.
const asposeSlides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");
var presentation = new asposeSlides.Presentation();
var slideSize = presentation.getSlideSize().getSize();
var slide = presentation.getSlides().get_Item(0);
// Prepare data for the OLE object.
var oleStream = fs.readFileSync("book.xlsx");
var fileData = Array.from(oleStream);
var dataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", fileData), "xlsx");
// Add the OLE object frame to the slide.
slide.getShapes().addOleObjectFrame(0, 0, slideSize.getWidth(), slideSize.getHeight(), dataInfo);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Ajout de cadres d’objet OLE liés
Aspose.Slides for Node.js via Java vous permet d’ajouter un OleObjectFrame sans incorporer les données mais uniquement avec un lien vers le fichier.
Ce code JavaScript vous montre comment ajouter un OleObjectFrame avec un fichier Excel lié à une diapositive :
const asposeSlides = require("aspose.slides.via.java");
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
// Ajoutez un cadre d'objet OLE avec un fichier Excel lié.
slide.getShapes().addOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Accès aux cadres d’objet OLE
Si un objet OLE est déjà incorporé dans une diapositive, vous pouvez facilement le trouver ou y accéder de cette façon :
- Chargez une présentation contenant l’objet OLE incorporé en créant une instance de la classe Presentation.
- Obtenez la référence de la diapositive en utilisant son index.
- Accédez à la forme OleObjectFrame. Dans notre exemple, nous avons utilisé le PPTX créé précédemment qui ne comporte qu’une forme sur la première diapositive.
- Une fois le cadre d’objet OLE accédé, vous pouvez effectuer toute opération dessus.
Dans l’exemple ci‑dessous, un cadre d’objet OLE (un objet graphique Excel incorporé dans une diapositive) et ses données de fichier sont accédés.
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
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;
// Obtenir les données du fichier incorporé.
var fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
// Obtenir l'extension du fichier incorporé.
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
// ...
}
Accès aux propriétés du cadre d’objet OLE lié
Aspose.Slides vous permet d’accéder aux propriétés du cadre d’objet OLE lié.
Ce code JavaScript vous montre comment vérifier si un objet OLE est lié puis obtenir le chemin du fichier lié :
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
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;
// Vérifier si l'objet OLE est lié.
if (oleFrame.isObjectLink()) {
// Afficher le chemin complet du fichier lié.
console.log("OLE object frame is linked to:", oleFrame.getLinkPathLong());
// Afficher le chemin relatif du fichier lié s'il est présent.
// Seules les présentations PPT peuvent contenir le chemin relatif.
if (oleFrame.getLinkPathRelative() != null && oleFrame.getLinkPathRelative() != "") {
console.log("OLE object frame relative path:", oleFrame.getLinkPathRelative());
}
}
}
presentation.dispose();
Modification des données d’un objet OLE
Note
Dans cette section, l’exemple de code ci‑dessous utilise Aspose.Cells for Java.Si un objet OLE est déjà incorporé dans une diapositive, vous pouvez facilement accéder à cet objet et modifier ses données de cette façon :
- Chargez une présentation contenant l’objet OLE incorporé en créant une instance de la classe Presentation.
- Obtenez la référence de la diapositive via son index.
- Accédez à la forme du cadre d’objet OLE. Dans notre exemple, nous avons utilisé le PPTX créé précédemment qui possède une forme sur la première diapositive.
- Une fois le cadre d’objet OLE accédé, vous pouvez effectuer toute opération dessus.
- Créez un objet
Workbooket accédez aux données OLE. - Accédez à la
Worksheetsouhaitée et modifiez les données. - Enregistrez le
Workbookmis à jour dans un flux. - Modifiez les données de l’objet OLE à partir du flux.
Dans l’exemple ci‑dessous, un cadre d’objet OLE (un objet graphique Excel incorporé dans une diapositive) est accédé, et ses données de fichier sont modifiées pour mettre à jour les données du graphique.
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
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 embeddedData = Array.from(oleFrame.getEmbeddedData().getEmbeddedFileData());
var oleStream = java.newInstanceSync("java.io.ByteArrayInputStream", java.newArray("byte", embeddedData));
// Lire les données de l'objet OLE sous forme d'objet Workbook.
var workbook = java.newInstanceSync("com.aspose.cells.Workbook", oleStream);
var newOleStream = java.newInstanceSync("java.io.ByteArrayOutputStream");
// Modifier les données du classeur.
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("com.aspose.cells.OoxmlSaveOptions", java.getStaticFieldValue("com.aspose.cells.SaveFormat", "XLSX"));
workbook.save(newOleStream, fileOptions);
// Modifier les données de l'objet du cadre OLE.
var newFileData = java.newArray("byte", Array.from(newOleStream.toByteArray()));
var newData = new asposeSlides.OleEmbeddedDataInfo(newFileData, oleFrame.getEmbeddedData().getEmbeddedFileExtension());
oleFrame.setEmbeddedData(newData);
newOleStream.close();
oleStream.close();
}
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Incorporation d’autres types de fichiers dans les diapositives
Outre les graphiques Excel, Aspose.Slides for Node.js via Java vous permet d’incorporer d’autres types de fichiers dans les diapositives. Par exemple, vous pouvez insérer des fichiers HTML, PDF et ZIP en tant qu’objets. Lorsqu’un utilisateur double‑clique sur l’objet inséré, il s’ouvre automatiquement dans le programme pertinent, ou l’utilisateur est invité à sélectionner un programme approprié pour l’ouvrir.
Ce code JavaScript vous montre comment incorporer HTML et ZIP dans une diapositive :
const asposeSlides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");
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();
Définition du type de fichier pour les objets incorporés
Lorsque vous travaillez avec des présentations, il peut être nécessaire de remplacer d’anciens objets OLE par de nouveaux ou de remplacer un objet OLE non pris en charge par un objet pris en charge. Aspose.Slides for Node.js via Java vous permet de définir le type de fichier pour un objet incorporé, ce qui vous permet de mettre à jour les données du cadre OLE ou son extension.
Ce code JavaScript vous montre comment définir le type de fichier d’un objet OLE incorporé sur zip :
const asposeSlides = require("aspose.slides.via.java");
const java = require("java");
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);
// Modifier le type de fichier en 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();
Définition des images d’icône et des titres pour les objets incorporés
Après l’incorporation d’un objet OLE, un aperçu composé d’une image d’icône est ajouté automatiquement. Cet aperçu est ce que les utilisateurs voient avant d’accéder ou d’ouvrir l’objet OLE. Si vous souhaitez utiliser une image et un texte spécifiques comme éléments de l’aperçu, vous pouvez définir l’image d’icône et le titre à l’aide d’Aspose.Slides for Node.js via Java.
Ce code JavaScript vous montre comment définir l’image d’icône et le titre pour un objet incorporé :
const asposeSlides = require("aspose.slides.via.java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
// Ajouter une image aux ressources de la présentation.
var image = asposeSlides.Images.fromFile("image.png");
var oleImage = presentation.getImages().addImage(image);
image.dispose();
// 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", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Empêcher le redimensionnement et le repositionnement d’un cadre d’objet OLE
Après avoir ajouté un objet OLE lié à une diapositive de présentation, lorsque vous ouvrez la présentation dans PowerPoint, un message peut apparaître vous demandant de mettre à jour les liens. Cliquer sur le bouton “Update Links” peut modifier la taille et la position du cadre d’objet OLE parce que PowerPoint met à jour les données à partir de l’objet OLE lié et rafraîchit l’aperçu de l’objet. Pour empêcher PowerPoint de vous inviter à mettre à jour les données de l’objet, appelez la méthode setUpdateAutomatic de la classe OleObjectFrame avec false :
const asposeSlides = require("aspose.slides.via.java");
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
oleFrame.setUpdateAutomatic(false);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
Extraction des fichiers incorporés
Aspose.Slides for Node.js via Java vous permet d’extraire les fichiers incorporés dans les diapositives sous forme d’objets OLE de cette manière :
- Créez une instance de la classe Presentation contenant les objets OLE que vous souhaitez extraire.
- Parcourez toutes les formes de la présentation et accédez aux formes OLEObjectFrame.
- Accédez aux données des fichiers incorporés à partir des cadres d’objet OLE et écrivez‑les sur le disque.
Ce code JavaScript vous montre comment extraire les fichiers incorporés dans une diapositive sous forme d’objets OLE :
const asposeSlides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");
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();
FAQ
Le contenu OLE sera-t-il rendu lors de l’exportation des diapositives en PDF/images ?
Ce qui est visible sur la diapositive est rendu — l’icône/l’image de substitution (aperçu). Le contenu OLE « en direct » n’est pas exécuté pendant le rendu. Si nécessaire, définissez votre propre image d’aperçu pour garantir l’apparence attendue dans le PDF exporté.
Pour également conserver le fichier incorporé comme pièce jointe PDF, appelez setIncludeOleData avec true. Cette option est désactivée par défaut. Pour un exemple et des instructions sur la vérification de la pièce jointe, voir Preserve Embedded OLE Files as PDF Attachments.
Comment puis‑je verrouiller un objet OLE sur une diapositive afin que les utilisateurs ne puissent pas le déplacer/modifier dans PowerPoint ?
Verrouillez la forme : Aspose.Slides fournit des verrouillages au niveau de la forme. Ce n’est pas du chiffrement, mais cela empêche efficacement les modifications et déplacements accidentels.
Les chemins relatifs des objets OLE liés seront‑ils conservés dans le format PPTX ?
Dans le PPTX, les informations de « chemin relatif » ne sont pas disponibles — seul le chemin complet l’est. Les chemins relatifs se trouvent dans l’ancien format PPT. Pour la portabilité, privilégiez des chemins absolus fiables/URI accessibles ou l’incorporation.