3 votes

Comment puis-je convertir chaque diapositive Google en PDF et JPG ?

Google Apps script

  • Je souhaite créer des fichiers PDF pour chaque diapositive d'un fichier Google slide. (une diapositive normale avec des mots et des graphiques) .
  • J'ai passé en revue les questions précédentes et j'ai trouvé une solution qui génère des fichiers PDF en conservant les diapositives sous forme d'images. (J'ai besoin de pouvoir rechercher des mots dans ces pdf) .
  • Une autre solution a été appliquée pour convertir la feuille de calcul en PDF, mais elle n'a pas fonctionné dans mon cas.

Voici ma référence

function autoFlyerGenerator() {

  const name_file = "FILE_NAME";

  // Template file in Google slide
  const ppt_file = DriveApp.getFileById(##SLIDE_ID##);
  // Temporal folder to store a temporal slide file
  const temp_folder = DriveApp.getFolderById(##TEMP_FOLDER_ID##);
  // PDF folder
  const pdf_folder = DriveApp.getFolderById(##PDF_FOLDER_ID##);

  // My current spreadsheet
  const ss = SpreadsheetApp.getActive();
  const values_ss = ss.getDataRange().getValues();

  const temp_ppt = ppt_file.makeCopy(temp_folder).setName(name_file);
  const open_temp_ppt = SlidesApp.openById(temp_ppt.getId());
  const slides = open_temp_ppt.getSlides();

  // First for-loop iterate over all rows (without the header)
  // Second for-loop iterate over all columns
  for (var index = 0; index < ss.getLastRow()-1; index++){
    for (var col = 0; col < ss.getLastColumn(); col++){
      slides[index].replaceAllText(values_ss[0][col], values_ss[index+1][col])
    }
  }

  open_temp_ppt.saveAndClose();

  // This code block create a single PDF of the slide
  const pdfContentBlob = temp_ppt.getBlob();
  pdf_folder.createFile(pdfContentBlob).setName(name_file);
}

Mise à jour

  • J'ai oublié de mentionner que le fichier Google slide a une taille de mise en page différente de celle par défaut.
  • La première réponse à cette question résout le problème de la génération des fichiers pdf, mais elle ne prend pas en compte la taille de la diapositive.

2voto

Tanaike Points 22314

Je crois que votre objectif est le suivant.

  • Vous souhaitez exporter chaque page d'un document Google Slides sous forme de fichier PDF.
  • Vous souhaitez y parvenir en utilisant le script de Google Apps.

Dans ce cas, que diriez-vous du flux suivant ?

  1. Récupérer toutes les diapositives de la source Google Slides.
  2. Créer une diapositive temporelle sur Google.
  3. Exporter chaque page au format PDF.
  4. Supprimez les diapositives temporelles de Google.

Lorsque ce flux est reflété dans un script, il se présente comme suit.

Exemple de script :

Veuillez copier et coller le script suivant dans l'éditeur script de Google Slides, et exécuter la fonction myFunction . Le script est alors exécuté.

function myFunction() {
  const folderId = "###"; // Please set the folder ID you want to put the exported PDF files.

  // 1. Retrieve all slides from the source Google Slides.
  const slide = SlidesApp.getActivePresentation();
  const srcSlides = slide.getSlides();

  // 2. Create a temporal Google Slides.
  let temp = SlidesApp.create("temp");
  const id = temp.getId();
  const file = DriveApp.getFileById(id);
  const folder = DriveApp.getFolderById(folderId);

  // 3. Export each page as a PDF file.
  srcSlides.forEach((s, i) => {
    temp.appendSlide(s);
    temp.getSlides()[0].remove();
    temp.saveAndClose();
    folder.createFile(file.getBlob().setName(`page_${i + 1}.pdf`));
    temp = SlidesApp.openById(id);
  });

  // 4. Remove the temporal Google Slides.
  file.setTrashed(true);
}
  • Dans ce cas, les noms de fichiers de chaque fichier PDF sont les suivants page_1.pdf , page_2.pdf .

Remarque :

  • Si vous souhaitez exporter chaque diapositive sous forme de fichier JPEG au lieu d'un fichier PDF, vous pouvez également utiliser l'exemple suivant script. Dans ce cas, l'API des diapositives est utilisée. Donc, avant d'exécuter le script, Veuillez activer l'API Slides dans les services Google avancés .

      function myFunction() {
        const folderId = "###"; // Please set the folder ID you want to put the exported PDF files.
    
        // 1. Retrieve all slides from the source Google Slides.
        const slide = SlidesApp.getActivePresentation();
        const id = slide.getId();
        const srcSlides = slide.getSlides();
    
        // 2. Export each page as a JPEG file.
        const folder = DriveApp.getFolderById(folderId);
        srcSlides.forEach((s, i) => {
          const url = Slides.Presentations.Pages.getThumbnail(id, s.getObjectId(), {"thumbnailProperties.mimeType": "PNG"}).contentUrl;
          const blob = UrlFetchApp.fetch(url).getAs(MimeType.JPEG);
          folder.createFile(blob.setName(`page_${i + 1}.jpg`));
        });
      }
    • Dans ce cas, les noms de fichiers de chaque fichier JPEG sont les suivants page_1.jpg , page_2.jpg .

Références :

Ajouté :

D'après la réponse suivante de l'OP,

Mon fichier Slide a une mise en page différente de celle par défaut, de sorte que lorsque j'applique votre code, les fichiers PDF générés ont la taille par défaut, ce qui donne des fichiers déformés. Comment puis-je résoudre ce problème ?

En fait, c'est ma faute. Je veux dire que mon fichier Google Slide original a une mise en page différente (disons 14 x 18 cm). Votre code fonctionne, mais les fichiers PDF générés ont la mise en page par défaut d'une diapositive.

D'après les réponses ci-dessus, il semble que la taille de la page ne soit pas celle par défaut. Dans ce cas, j'aimerais proposer d'utiliser la taille de la page de la diapositive Google originale. L'exemple de script est le suivant.

Exemple de script :

function myFunction2() {
  const folderId = "###"; // Please set the folder ID you want to put the exported PDF files.

  // 1. Retrieve all slides from the source Google Slides.
  const slide = SlidesApp.getActivePresentation();
  const srcId = slide.getId();
  const srcSlides = slide.getSlides();

  // 2. Create a temporal Google Slides.
  const file = DriveApp.getFileById(srcId).makeCopy("temp");
  const id = file.getId();
  let temp = SlidesApp.openById(id);
  temp.getSlides().forEach((e, i) => {
    if (i != 0) e.remove();
  });
  const folder = DriveApp.getFolderById(folderId);

  // 3. Export each page as a PDF file.
  srcSlides.forEach((s, i) => {
    temp.appendSlide(s);
    temp.getSlides()[0].remove();
    temp.saveAndClose();
    folder.createFile(file.getBlob().setName(`page_${i + 1}.pdf`));
    temp = SlidesApp.openById(id);
  });

  // 4. Remove the temporal Google Slides.
  file.setTrashed(true);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X