OLE kezelése prezentációkban Androidon

Bevezetés

Tekintsünk egy MS Excelben létrehozott diagramra. A diagramot ezután egy PowerPoint diaba helyezzük. Ez az Excel-diagram OLE objektumnak tekinthető.

  • Egy OLE objektum megjelenhet ikonként. Ebben az esetben, ha duplán kattint a ikonra, a diagram megnyílik a hozzá tartozó alkalmazásban (Excel), vagy felkérik 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 Aktiválódik a PowerPointban, a diagram felülete betöltődik, és módosíthatja a diagram adatait a PowerPointon belül.

Aspose.Slides for Android via Java lehetővé teszi OLE objektumok beszúrását a diákba OLE objektumkeretekként (OleObjectFrame).

OLE objektumkeretek hozzáadása a diákhoz

Feltételezve, hogy már létrehozott egy diagramot a Microsoft Excelben, és azt OLE objektumkeretként szeretné beágyazni egy diára az Aspose.Slides for Android via Java használatával, ezt a következőképpen teheti:

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. A diát az indexe alapján szerezze meg.
  3. Olvassa be az Excel-fájlt bájttömbként.
  4. Adja hozzá a OleObjectFrame elemet a diához, amely tartalmazza a bájttömböt és az OLE objektum egyéb adatait.
  5. Í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 OLE objektumkeretként adtunk hozzá egy diához az Aspose.Slides for Android via Java használatával.
Megjegyzés: a OleEmbeddedDataInfo konstruktor második paraméterként egy beágyazható objektum kiterjesztést fogad. 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álasztja az OLE objektum megnyitásához.

Presentation presentation = new Presentation();
SizeF slideSize = presentation.getSlideSize().getSize();
ISlide slide = presentation.getSlides().get_Item(0);

// Az OLE objektum adatai előkészítése.
File file = new File("book.xlsx");
byte fileData[] = new byte[(int) file.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
DataInputStream dis = new DataInputStream(bis);
dis.readFully(fileData);

IOleEmbeddedDataInfo dataInfo = new OleEmbeddedDataInfo(fileData, "xlsx");

// OLE objektumkeret hozzáadása a diára.
slide.getShapes().addOleObjectFrame(0, 0, slideSize.getWidth(), slideSize.getHeight(), dataInfo);

presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();

Csatolt OLE objektumkeretek hozzáadása

Az Aspose.Slides for Android via Java lehetővé teszi, hogy egy OleObjectFrame elemet csak a fájlra mutató hivatkozással adjon hozzá, anélkül hogy beágyazná az adatokat.

Ez a Java-kód bemutatja, hogyan adhat hozzá egy OleObjectFrame elemet egy csatolt Excel fájllal egy diához:

Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);

// Olyan OLE objektumkeret hozzáadása, amely egy csatolt Excel fájlra mutat.
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álhatja vagy elérheti a következő módon:

  1. 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.
  2. Szerezze meg a dia referenciáját az indexe használatával.
  3. Hozza elérhet az OleObjectFrame alakzatot.
    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 volt a kívánt OLE objektumkeret, amelyet el kell érni.
  4. Miután hozzáfért az OLE objektumkerethez, bármilyen műveletet végrehajthat rajta.

Az alábbi példában egy OLE objektumkeret (egy diára beágyazott Excel-diagram objektum) és annak fájladatai elérhetők.

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;
    
    // Szerezze meg a beágyazott fájl adatait.
    byte[] fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();

    // Szerezze meg a beágyazott fájl kiterjesztését.
    String fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();

    // ...
}

Csatolt OLE objektumkeret tulajdonságainak elérése

Az Aspose.Slides lehetővé teszi a csatolt OLE objektumkeret tulajdonságainak elérését.

Ez a Java-kód bemutatja, hogyan ellenőrizhető, hogy egy OLE objektum csatolt-e, majd hogyan szerezhető meg a csatolt fájl elérési útja:

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 linkelt-e.
    if (oleFrame.isObjectLink()) {
        // Kiírja a csatolt fájl teljes útvonalát.
        System.out.println("OLE object frame is linked to: " + oleFrame.getLinkPathLong());

        // Kiírja a csatolt 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().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érheti azt és módosíthatja az adatait a következőképpen:

  1. 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.
  2. A diát az indexe alapján szerezze meg.
  3. Hozza elérhet az OLE objektumkeret alakzatot.
    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 volt a kívánt OLE objektumkeret, amelyet el kell érni.
  4. Miután hozzáfért az OLE objektumkerethez, bármilyen műveletet végrehajthat rajta.
  5. Hozzon létre egy Workbook objektumot és érje el az OLE adatokat.
  6. Érje el a kívánt Worksheet-et és módosítsa az adatokat.
  7. Mentse a frissített Workbook-ot egy streambe.
  8. Módosítsa az OLE objektum adatait a streamből.

Az alábbi példában egy OLE objektumkeret (egy diára beágyazott Excel-diagram objektum) elérhető, és a fájladatai módosítva lesznek a diagram adatainak 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 adatait Workbook objektumként.
    Workbook workbook = new Workbook(oleStream);

    ByteArrayOutputStream newOleStream = new 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);

    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 diákba

Az Excel-diagramok mellett az Aspose.Slides for Android via Java lehetővé teszi más típusú fájlok diákba történő beágyazását is. Például beszúrhat HTML, PDF és ZIP fájlokat objektumként. Amikor a felhasználó duplán kattint a beszúrt objektumra, az automatikusan megnyílik a megfelelő programban, vagy a felhasználót arra kérik, hogy válasszon egy megfelelő programot a megnyitáshoz.

Ez a Java-kód bemutatja, hogyan ágyazhat be HTML-t és ZIP-et egy diára:

Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);

File fileHtml = new File("sample.html");
byte htmlData[] = new byte[(int) fileHtml.length()];
BufferedInputStream bisHtml = new BufferedInputStream(new FileInputStream(fileHtml));
DataInputStream disHtml = new DataInputStream(bisHtml);
disHtml.readFully(htmlData);
IOleEmbeddedDataInfo htmlDataInfo = new OleEmbeddedDataInfo(htmlData, "html");
IOleObjectFrame htmlOleFrame = slide.getShapes().addOleObjectFrame(150, 120, 50, 50, htmlDataInfo);
htmlOleFrame.setObjectIcon(true);

File fileZip = new File("sample.zip");
byte zipData[] = new byte[(int) fileZip.length()];
BufferedInputStream bisZip = new BufferedInputStream(new FileInputStream(fileZip));
DataInputStream disZip = new DataInputStream(bisZip);
disZip.readFully(zipData);
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 szükség lehet a régi OLE objektumok újakra történő cseréjére vagy egy nem támogatott OLE objektum helyettesítésére egy támogatottal. Az Aspose.Slides for Android via Java lehetővé teszi egy beágyazott objektum fájltípusának beállítását, így frissítheti az OLE keret adatait vagy kiterjesztését.

Ez a Java-kód bemutatja, hogyan állítható be egy 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 megváltoztatása ZIP-re.
oleFrame.setEmbeddedData(new OleEmbeddedDataInfo(fileData, "zip"));

presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();

Beágyazott objektumok ikonképének és címének beállítása

Egy OLE objektum beágyazása után automatikusan egy előnézet, amely ikonképből áll, hozzáadódik. Ez az előnézet azt mutatja, amit a felhasználók látnak, mielőtt hozzáférnének vagy megnyitnák az OLE objektumot. Ha egy konkrét képet és szöveget szeretne használni az előnézet elemeiként, az ikonképet és a címet az Aspose.Slides for Android via Java segítségével állíthatja be.

Ez a Java-kód bemutatja, hogyan állítható be az ikonké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.
File file = new File("image.png");
byte imageData[] = new byte[(int) file.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
DataInputStream dis = new DataInputStream(bis);
dis.readFully(imageData);
IPPImage oleImage = presentation.getImages().addImage(imageData);

// Cím és kép beállítása az OLE előnézethez.
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 csatolt OLE objektumot ad hozzá egy prezentációs diára, a PowerPointban történő megnyitáskor megjelenhet egy üzenet, amely a hivatkozások frissítését kéri. Az „Update Links” (Hivatkozások frissítése) gomb megnyomása módosíthatja az OLE objektumkeret méretét és pozícióját, mert a PowerPoint frissíti a csatolt OLE objektum adatait és újratölti az objektum előnézetét. A PowerPoint arra való figyelmeztetésének elkerüléséhez, hogy frissítse az objektum adatait, állítsa a IOleObjectFrame interfész setUpdateAutomatic metódusát false-ra:

oleFrame.setUpdateAutomatic(false);

Beágyazott fájlok kinyerése

Az Aspose.Slides for Android via 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:

  1. Hozzon létre egy Presentation osztályú példányt, amely tartalmazza a kinyerni kívánt OLE objektumokat.
  2. Iteráljon végig a prezentáció összes alakzatán, és érje el a OLEObjectFrame alakzatokat.
  3. Érje el a beágyazott fájlok adatait az OLE objektumkeretekből, és írja őket lemezre.

Ez a Java-kód bemutatja, hogyan nyerhetők ki a diára beágyazott fájlok OLE objektumokké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();

        FileOutputStream fos = new FileOutputStream(new File("OLE_object_" + index + fileExtension));
        fos.write(fileData);
        fos.close();
    }
}

presentation.dispose();

GYIK

Megjelenik-e az OLE tartalom a diák PDF/képek exportálásakor?
A diákon 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ítsa be a saját előnézeti képet, hogy a várt megjelenés biztosítva legyen az exportált PDF-ben.

Hogyan lehet egy OLE objektumot lezárni a dián, hogy a felhasználók ne mozgathassák vagy szerkeszthessék PowerPointban?
Zárja le az alakzatot: az Aspose.Slides alakzatszintű zárakat biztosít. 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 egy csatolt Excel objektumnak, amikor megnyitom a prezentációt?
A PowerPoint frissítheti a csatolt OLE előnézetét. Stabil megjelenés érdekében kövesse a Worksheet Resizing működő megoldás gyakorlatokat – vagy igazítsa a keretet a tartományhoz, vagy méretezze a tartományt egy fix keretre, és állítson be megfelelő helyettesítő képet.

Megmaradnak-e a relatív útvonalak a csatolt OLE objektumok esetében 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 szerepelnek. A hordozhatóság érdekében ajánlott megbízható abszolút útvonalakat / hozzáférhető URI-kat vagy beágyazást használni.