Működő megoldás a diagram átméretezéséhez PPTX-ben
Áttekintés
Az Aspose komponenseket használó PowerPoint‑prezentációkban OLE‑objektumként beágyazott Excel‑diagramok első aktiválásuk után megváltoztathatják a méretüket. Ez észrevehető különbséget eredményezhet a diagram megjelenése között aktiválás előtt és után. Ez a cikk elmagyarázza, miért fordul elő az átméretezés, és bemutatja, hogyan lehet megelőzni azt úgy, hogy a rögzített diagramméreteket az OLE‑kerethez illesztjük.
Az Excel‑diagramok létrehozása és OLE‑objektumként történő beágyazása a prezentációkba című cikkben bemutattuk, hogyan lehet Aspose.Cells for Node.js via Java segítségével Excel‑diagramot készíteni, majd azt Aspose.Slides for Node.js via Java‑val PowerPoint‑prezentációba beágyazni. Az objektum előnézeti probléma megoldásaként a diagram képét rendeltük a diagram OLE‑objektumkeretéhez. A kimeneti prezentációban, ha duplán a diagramképet megjelenítő OLE‑objektumkeretre kattintunk, az Excel‑diagram aktiválódik. A felhasználók szerkeszthetik a beágyazott Excel‑munkafüzetet, majd a aktivált munkafüzeten kívülre kattintva visszatérhetnek a diára. Az OLE‑objektumkeret mérete megváltozik, amikor a felhasználó visszatér a diára, és az átméretezési arány a OLE‑objektumkeret és a beágyazott Excel‑munkafüzet eredeti méreteitől függ.
Az átméretezés oka
A beágyazott Excel‑munkafüzet saját ablakméretekkel rendelkezik, amelyeket az Excel megpróbál megtartani, amikor az objektum először aktiválódik. A dián lévő OLE‑keret önállóan definiált méretekkel bír. Amikor az Excel‑munkafüzet aktiválódik, az Excel és a PowerPoint egyeztetik az objektum méretét, hogy a beágyazási folyamat részeként arányait megtartsa. A munkafüzetablak és az OLE‑keret közötti eltérések ezért az objektum átméreteződését okozhatják.
Működő megoldás
Illessze a diagram méretét a dián lévő OLE‑kerethez, és tartsa a diagramméreteket a munkafüzetablaktól függetlenül. Ez a megoldás új prezentációval vagy meglévő sablonnal egyaránt működik.
A példa az Aspose.Cells for Node.js via Java és az Aspose.Slides for Node.js via Java csomagokat igényli. Telepítse a aspose.cells, aspose.slides.via.java és java Node.js csomagokat. Futtassa az alábbi két CommonJS‑scriptet külön Node.js‑processzben, ugyanabban a munkakönyvtárban, mivel mindkét Aspose‑csomag a betöltés során inicializálja a Java‑hidat. A script egy egyszerű oszlopdiagramot hoz létre az aktív diagramlapon, és beágyazza a munkafüzetet XLS formátumban. Nem kerül diagram‑előnézeti kép hozzárendelésre; a diagram a OLE‑objektum PowerPoint‑ban való aktiválásakor válik láthatóvá.
A példa egy új prezentációt hoz létre, amely 9.5 × 4‑hüvelykes OLE‑kerettel rendelkezik, balról 0.5 hüvelyk, felül pedig 1 hüvelyk távolságra elhelyezve. A dia koordinátái és méretei pontokban (72 pont hüvelykenként) vannak megadva. Meglévő prezentáció esetén lásd a Sablon használata szekciót.
Állítsa be a rögzített diagramméretet
Állítsa a setSizeWithWindow értékét false-ra, hogy a diagramméretek függetlenek legyenek a munkafüzetablaktól. Állítsa a getChartObject méreteit a setWidth és a setHeight segítségével, a pontokat 96 pixel/hüvelyk átváltással pixelekké konvertálva: egy 684 × 288 pont méretű keret 912 × 384 pixel méretű diagramnak felel meg. Állítsa a setPrintSize értékét a PrintSizeType CUSTOM értékére. A példa a addOleObjectFrame segítségével ágyazza be a munkafüzetet, és egy 9.5 × 4 hüvelykes OLE‑kerettel rendelkező prezentációt ment.
Mentse az első scriptet create-fixed-chart.js néven. Ez egy chart-fixed-size.xls fájlt hoz létre, amely 912 × 384 pixel méretű diagramot tartalmaz, ami megfelel a második script által használt 684 × 288 pont méretű keretnek. Bemeneti munkafüzet nem szükséges.
const cells = require("aspose.cells");
const workbook = new cells.Workbook();
try {
const dataSheet = workbook.getWorksheets().get(0);
dataSheet.setName("Data");
dataSheet.getCells().get("A1").putValue(10);
dataSheet.getCells().get("A2").putValue(20);
const chartSheetIndex = workbook.getWorksheets().add(cells.SheetType.CHART);
const chartSheet = workbook.getWorksheets().get(chartSheetIndex);
const chartIndex = chartSheet.getCharts().add(cells.ChartType.COLUMN, 0, 0, 20, 10);
const chart = chartSheet.getCharts().get(chartIndex);
chart.getNSeries().add("Data!A1:A2", true);
workbook.getWorksheets().setActiveSheetIndex(chartSheetIndex);
// Illessze az OLE keret méreteit pontban (72 pont hüvelykenként).
const width = 684; // 9,5 hüvelyk.
const height = 288; // 4 hüvelyk.
chart.setSizeWithWindow(false);
// Konvertálja a pontokat diagram pixelé 96 pixel/hüvelyk használatával.
chart.getChartObject().setWidth(Math.trunc(width / 72 * 96));
chart.getChartObject().setHeight(Math.trunc(height / 72 * 96));
chart.setPrintSize(cells.PrintSizeType.CUSTOM);
workbook.save("chart-fixed-size.xls", cells.SaveFormat.EXCEL_97_TO_2003);
} finally {
workbook.dispose();
}
// Minden szinkronizált munka befejeződött; leállítja a Java hidat.
process.exit(0);
Mentse a második scriptet embed-fixed-chart.js néven, és futtassa a create-fixed-chart.js után. A script beolvassa a generált XLS munkafüzetet, és elmenti a chart-fixed-size.pptx fájlt. A Java‑híd explicit Java‑byte‑tömböt igényel a munkafüzet adatainak, valamint Java‑float értékeket a keret koordinátáihoz és méreteihez. Az xls kiterjesztés megfelel a munkafüzet mentett formátumának.
const fs = require("fs");
const java = require("java");
const slides = require("aspose.slides.via.java");
const workbookBuffer = fs.readFileSync("chart-fixed-size.xls");
const workbookBytes = java.newArray("byte", Array.from(workbookBuffer));
const presentation = new slides.Presentation();
try {
const slide = presentation.getSlides().get_Item(0);
// Diának a koordinátái és méretei pontban vannak (72 pont hüvelykenként).
const width = 684; // 9,5 hüvelyk.
const height = 288; // 4 hüvelyk.
const dataInfo = new slides.OleEmbeddedDataInfo(workbookBytes, "xls");
slide.getShapes().addOleObjectFrame(java.newFloat(36), java.newFloat(72), java.newFloat(width), java.newFloat(height), dataInfo);
presentation.save("chart-fixed-size.pptx", slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
// Minden szinkron munka befejeződött; leállítja a Java hidat.
process.exit(0);
Sablon használata
Az átméretezési logika ugyanaz meglévő prezentációk esetén is. A példa adaptálásához:
- Töltsön be egy sablonprezentációt az üres prezentáció létrehozása helyett.
- Ellenőrizze, hogy az első dia legalább három alakzatot tartalmaz, majd a 2. indexű alakzatot használja helykitöltőként.
- Vegye a keret szélességét és magasságát abból az alakzatból a 684 és 288 rögzített értékek helyett. Használja ugyanazokat a méreteket a munkafüzet‑létrehozó scriptben, a méretezési számítások változatlanul tartásával, és generálja újra az XLS munkafüzetet, mielőtt beágyazná.
- Adja hozzá az OLE keretet a helykitöltő pozíciójához a 36 és 72 rögzített koordináták helyett.
- Távolítsa el a helykitöltőt a prezentáció mentése előtt.
FAQ
Miért változik meg a beágyazott Excel‑diagram mérete a PowerPoint‑ban történő aktiválás után?
Ez azért történik, mert az Excel megpróbálja visszaállítani az eredeti ablakméretet az első aktiváláskor, míg a PowerPoint‑ban lévő OLE‑objektumkeret saját méretekkel rendelkezik. A PowerPoint és az Excel a méretet egyeztetik, hogy megtartsák az arányt, ami az átméretezést okozhatja.
Hogyan tarthatom konzisztensnek a diagram és az OLE‑keret méretét?
Állítson be rögzített diagramméreteket, amelyek megegyeznek az OLE‑kerettel, és használjon egyedi diagramnyomtatási méretet a munkafüzet beágyazása előtt. A fenti példa bemutatja a szükséges beállításokat és egységkonverziókat.
Elégséges a munkafüzetablak méretének egyeztetése?
A munkafüzetablak méretének egyeztetése önmagában nem biztosítja megbízhatóan, hogy az OLE‑keret mérete ne változzon az aktiválás után. Használjon rögzített diagramméreteket, ahogy a példában látható.
Ez a megoldás működik sablon‑alapú és új prezentációkkal egyaránt?
Igen. Sablonnal dolgozva használja a helykitöltő méreteit és pozícióját. Új prezentáció esetén adja meg közvetlenül a keret méreteit és pozícióját.
Használhatom ezt a példát más táblázatkezelő programokban létrehozott diagramokkal?
A példa egy Aspose.Cells‑el létrehozott Excel‑munkafüzetet használ. Nem mutatja be az aktiválási viselkedést más táblázatkezelő programok esetén.