حل عملي لتغيير حجم المخططات في PPTX

الخلفية

في المقال السابق، شرحنا كيفية إنشاء مخطط Excel باستخدام Aspose.Cells لـ Java ومن ثم تضمين هذا المخطط في عرض PowerPoint باستخدام Aspose.Slides لـ Java. من أجل استيعاب مشكلة تغيير الكائن ، قمنا بتعيين صورة المخطط لإطار كائن OLE للمخطط. في العرض الناتج، عندما نضغط مرتين على إطار كائن OLE الذي يعرض صورة المخطط، يتم تفعيل مخطط Excel. يمكن للمستخدمين النهائيين إجراء أي تغييرات ت desired على دفتر العمل الفعلي في Excel ثم العودة إلى الشريحة المعنية بالنقر خارج دفتر العمل الفعال في Excel. سيتغير حجم إطار كائن OLE عندما يعود المستخدم إلى الشريحة. سيكون عامل تغيير الحجم مختلفًا لأحجام مختلفة من إطار كائن OLE ودفتر العمل المدمج في Excel.

سبب تغيير الحجم

نظرًا لأن دفتر العمل في Excel له حجم نافذته الخاصة، فإنه يحاول الحفاظ على حجمه الأصلي عند التفعيل الأول. من جهة أخرى، سيكون لإطار كائن OLE حجمه الخاص. وفقًا لمايكروسوفت، عند تفعيل دفتر العمل في Excel، تتفاوض Excel وPowerPoint على الحجم وتضمن أنه في النسب الصحيحة كجزء من عملية التضمين. استنادًا إلى الاختلافات في حجم Windows في Excel وحجم / موضع إطار كائن OLE، يحدث تغيير الحجم.

الحل العملي

هناك سيناريوهان محتملان لإنشاء عروض PowerPoint باستخدام Aspose.Slides لـ Java.السيناريو 1: إنشاء العرض استنادًا إلى قالب موجود.السيناريو 2: إنشاء العرض من الصفر. الحل الذي سنقدمه هنا سيكون صالحًا لكلا السيناريوهين. ستكون قاعدة جميع أساليب الحل وكما يلي: يجب أن يكون حجم نافذة كائن OLE المدمج هو نفس حجم إطار كائن OLE في شريحة PowerPoint. الآن، سنناقش الأسلوبين للحل.

النهج الأول

في هذا النهج، سنتعلم كيفية تعيين حجم نافذة دفتر العمل المدمج في Excel ليكون مكافئًا لحجم إطار كائن OLE في شريحة PowerPoint.السيناريو 1 دعنا نفترض أننا قد عرفنا قالبًا ونرغب في إنشاء العروض استنادًا إلى هذا القالب. لنفترض أن هناك شكلًا ما في الفهرس 2 في القالب حيث نريد وضع إطار OLE يحمل دفتر العمل المدمج في Excel. في هذا السيناريو، سيعتبر حجم إطار كائن OLE كحجم مسبق التحديد (وهو حجم الشكل في الفهرس 2 في القالب). كل ما علينا القيام به هو: تعيين حجم نافذة دفتر العمل ليكون متساويًا مع حجم الشكل. ستؤدي مقتطفات الشفرة التالية هذا الغرض:

try {
//set window width of the workbook in inches (divided by 576 as PowerPoint uses
//576 pixels / inch)
wb.getSettings().setWindowWidthInch(slide.getShapes().get_Item(2).getWidth()/72f);
//set window height of the workbook in inches
wb.getSettings().setWindowHeightInch(slide.getShapes().get_Item(2).getHeight()/72f);
//Save Workbook to Stream
ByteArrayOutputStream wbStream=new ByteArrayOutputStream();
wb.save(wbStream,com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
//Create an OLE Object Frame with embedded Excel
IOleObjectFrame oof = slide.getShapes().addOleObjectFrame(
slide.getShapes().get_Item(2).getX(),
slide.getShapes().get_Item (2).getY(),
slide.getShapes().get_Item (2).getWidth(),
slide.getShapes().get_Item (2).getHeight(), "Excel.Sheet.8", wbStream.toByteArray());
} catch (Exception e) {
}

السيناريو 2 دعنا نفترض أننا نريد إنشاء عرض تقديمي من الصفر ونرغب في إطار كائن OLE بأي حجم مع دفتر العمل المدمج في Excel. في مقتطف الشفرة التالية، أنشأنا إطار كائن OLE بارتفاع 4 بوصات وعرض 9.5 بوصة في الشريحة عند المحور السيني=0.5 بوصة والمحور الصادي=1 بوصة. بالإضافة إلى ذلك، قمنا بتعيين حجم نافذة دفتر العمل المعادل، وهو: الارتفاع 4 بوصات والعرض 9.5 بوصة.

try {
//Our desired height
int desiredHeight = 288;////4 inch (4 * 72)
//Our desired width
int desiredWidth = 684;////9.5 inch (9.5 * 72)
//define chart size with window
chart.setSizeWithWindow(true);
//set window width of the workbook in inches (divided by 576 as PowerPoint uses
//576 pixels / inch)
wb.getSettings().setWindowWidthInch(desiredHeight/72f);
//set window height of the workbook in inches
wb.getSettings().setWindowHeightInch(desiredWidth/72f);
//Save Workbook to Stream
ByteArrayOutputStream wbStream=new ByteArrayOutputStream();
wb.save(wbStream,com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
//Create an OLE Object Frame with embedded Excel
IOleObjectFrame oof = slide.getShapes().addOleObjectFrame(
288,
576,
desiredWidth,
desiredHeight, "Excel.Sheet.8", wbStream.toByteArray());
} catch (Exception e) {
}

النهج الثاني

في هذا النهج، سنتعلم كيفية تعيين حجم المخطط الموجود في دفتر العمل المدمج في Excel ليكون مكافئًا لحجم إطار كائن OLE في شريحة PowerPoint. يكون هذا النهج مفيدًا عندما يكون حجم المخطط معروفًا مسبقًا ولن يتغير أبدًا.السيناريو 1 دعنا نفترض أننا قد عرفنا قالبًا ونرغب في إنشاء العروض استنادًا إلى هذا القالب. لنفترض أن هناك شكلًا ما في الفهرس 2 في القالب حيث نريد وضع إطار OLE يحمل دفتر العمل المدمج في Excel. في هذا السيناريو، سيعتبر حجم إطار OLE كحجم مسبق التحديد (وهو حجم الشكل في الفهرس 2 في القالب). كل ما علينا القيام به هو: تعيين حجم المخطط في دفتر العمل ليكون متساويًا مع حجم الشكل. ستؤدي مقتطفات الشفرة التالية هذا الغرض:

try {
//define chart size with window
chart.setSizeWithWindow(false);
//set chart width in pixels (Multiply by 96 as Excel uses 96 pixels per inch)
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 72f) * 96f));
//set chart height in pixels
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 72f) * 96f));
//Define chart print size
chart.setPrintSize(PrintSizeType.CUSTOM);
//Save Workbook to Stream
ByteArrayOutputStream wbStream=new ByteArrayOutputStream();
wb.save(wbStream,com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
//Create an OLE Object Frame with embedded Excel
IOleObjectFrame oof = slide.getShapes().addOleObjectFrame(
slide.getShapes().get_Item(2).getX(),
slide.getShapes().get_Item (2).getY(),
slide.getShapes().get_Item (2).getWidth(),
slide.getShapes().get_Item (2).getHeight(), "Excel.Sheet.8", wbStream.toByteArray());
} catch (Exception e) {
}

السيناريو 2: دعنا نفترض أننا نريد إنشاء عرض تقديمي من الصفر ونرغب في إطار كائن OLE بأي حجم مع دفتر العمل المدمج في Excel. في مقتطف الشفرة التالية، أنشأنا إطار كائن OLE بارتفاع 4 بوصات وعرض 9.5 بوصة في الشريحة عند المحور السيني=0.5 بوصة والمحور الصادي=1 بوصة. بالإضافة إلى ذلك، قمنا بتعيين حجم المخطط المعادل، وهو: الارتفاع 4 بوصات والعرض 9.5 بوصة.

try {
//Our desired height
int desiredHeight = 288;////4 inch (4 * 72)
//Our desired width
int desiredWidth = 684;////9.5 inch (9.5 * 72)
//define chart size with window
chart.setSizeWithWindow(false);
//set chart width in pixels (Multiply by 96 as Excel uses 96 pixels per inch)
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 576f) * 96f));
//set chart height in pixels
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 576f) * 96f));
//Save Workbook to Stream
ByteArrayOutputStream wbStream=new ByteArrayOutputStream();
wb.save(wbStream,com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
//Create an OLE Object Frame with embedded Excel
IOleObjectFrame oof = slide.getShapes().addOleObjectFrame(
288,
576,
desiredWidth,
desiredHeight, "Excel.Sheet.8", wbStream.toByteArray());
} catch (Exception e) {
}

الاستنتاج