Come scalare le immagini nelle presentazioni con una macro ONLYOFFICE

24 settembre 2024By Alice

Quando si lavora con le immagini nelle presentazioni, ci sono situazioni in cui regolare manualmente le dimensioni di ciascuna immagine può richiedere molto tempo, soprattutto nelle presentazioni ricche di immagini. Con questa macro è possibile ridimensionare senza sforzo tutte le immagini della presentazione. Vediamo come costruire questa semplice macro e migliorare il flusso di lavoro della presentazione.

An ONLYOFFICE macro for Presentations to scale your images

Costruzione della macro

  const resizeImg = (images, width, height, slideIndex) => {
    const finalWdth = width * 36000; //Convert mm to EMUs
    const finalHgt = height * 36000; //Convert mm to EMUs
    images.forEach((element) => {
      try {
        element.SetSize(finalWdth, finalHgt);
      } catch (error) {
        console.error(
          `Could not change size for one or more images in slide no. ${slideIndex}. Check your presentation once.`
        );
      }
    });
  };

Cominciamo definendo la funzione resizeImg(), responsabile del ridimensionamento delle immagini. La funzione accetta quattro parametri: un array di immagini, l’ampiezza desiderata (width), l’altezza desiderata (height), e l’index della diapositiva corrente.

I valori width height inseriti sono convertiti da millimetri a EMUs (English Metric Units), che vengono poi passati come parametri al metodo SetSize(). Il metodo SetSize() imposta le dimensioni di ciascuna immagine alle width height inserite.

    const oPresentation = Api.GetPresentation();
    const slidesCount = oPresentation.GetSlidesCount();

Ora viene la parte principale della macro. Iniziamo recuperando la presentazione attiva con il metodo GetPresentation() (memorizzata nella variabile oPresentation) e poi il conteggio delle diapositive con il metodo GetSlidesCount() (memorizzato nella variabile slidesCount).

    const width = 100; //in mm (modify this value)
    const height = 100; //in mm (modify this value)

In seguito, impostiamo la larghezza e l’altezza desiderate per le immagini in millimetri (mm). È possibile modificare questi valori in base alle proprie esigenze.

    if (slidesCount === 0) {
      console.warn("You dont seem to have any slides in your presentation.");
      return;
    }

Se la presentazione non ha diapositive, segnaliamo un avviso e interrompiamo l’esecuzione della macro.

    for (let i = 0; i < slidesCount; i++) {
      const oSlide = oPresentation.GetSlideByIndex(i);
      const slideImgs = oSlide.GetAllImages();

Successivamente, utilizziamo un ciclo for per iterare tutte le diapositive. Per ogni iterazione, recuperiamo tutte le immagini della diapositiva utilizzando il metodo GetAllImages().

      if (slideImgs.length === 0) {
        console.warn(`No images found on slide ${i + 1}`);
        continue; //continue to next slide
      }

Se la diapositiva non ha immagini, registriamo un avviso e passiamo alla diapositiva successiva.

resizeImg(slideImgs, width, height, i + 1);

Una volta accertato che le immagini sono effettivamente presenti nella diapositiva, viene richiamato il metodo resizeImg(). Si passa l’array di tutte le immagini presenti nella diapositiva seguito dall’altezza, dalla larghezza e dall’indice della diapositiva corrente.

Codice completo della macro

Ecco il codice dell’intera macro:

(function () {
  const resizeImg = (images, width, height, slideIndex) => {
    const finalWdth = width * 36000; //Convert mm to EMUs
    const finalHgt = height * 36000; //Convert mm to EMUs
    images.forEach((element) => {
      try {
        element.SetSize(finalWdth, finalHgt);
      } catch (error) {
        console.error(
          `Could not change size for one or more images in slide no. ${slideIndex}. Check your presentation once.`
        );
      }
    });
  };

  try {
    const oPresentation = Api.GetPresentation();
    const slidesCount = oPresentation.GetSlidesCount();
    const width = 100; //in mm (modify this value)
    const height = 100; //in mm (modify this value)

    if (slidesCount === 0) {
      console.warn("You don't seem to have any slides in your presentation.");
      return;
    }

    for (let i = 0; i < slidesCount; i++) {
      const oSlide = oPresentation.GetSlideByIndex(i);
      const slideImgs = oSlide.GetAllImages();

      if (slideImgs.length === 0) {
        console.warn(`No images found on slide ${i + 1}`);
        continue; //continue to next slide
      }

      resizeImg(slideImgs, width, height, i + 1);
    }
  } catch (error) {
    console.error("An unexpected error occurred while running the macro", error);
  }
})();

Ora vediamo come funziona nella pratica:

That was it! Una semplice macro che consente di ridimensionare tutte le immagini della presentazione con un semplice clic. L’API di ONLYOFFICE è uno strumento potente, in grado di gestire una varietà di compiti e di aprire infinite possibilità per lo sviluppo di altre macro e plugin. Grazie a questa API, è possibile sbloccare tutta la potenza di ONLYOFFICE per migliorare la produttività e ottimizzare i flussi di lavoro.

Se hai domande o idee innovative, ti invitiamo a condividerle con noi. Apprezziamo il tuo contributo e non vediamo l’ora di collaborare con te. In bocca al lupo e buon lavoro!

 

Crea il tuo account ONLYOFFICE gratuito

Visualizza, modifica e collabora su documenti, fogli, diapositive, moduli e file PDF online.