С помощью скрипта Google Apps как загрузить каждый слайд презентации в формате PDF? - PullRequest
1 голос
/ 17 октября 2019

Я немного новичок в этом, поэтому заранее прошу прощения за любые новые неприятности, связанные с этим.

Я пытаюсь создать презентацию Google с различными изображениями, а затем загрузить каждый слайд в виде отдельного PDF-файла. У меня проблемы с загрузкой в ​​формате PDF. Презентация строится правильно. Я пробовал пару разных вещей, но пока не нашел работающего решения. Самым простым, что я попробовал, было:

var newFolder=rootFolder.createFolder(sourceSpreadsheet.getName() + ' - Functionals').setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);  
var deck = SlidesApp.create(NAME);  // name determined separately
var presentationID = deck.getId();

...

var blob = DriveApp.getFileById(presentationID).getBlob();
newFolder.createFile(blob);

Это создало PDF, но, похоже, это была всего лишь одна пустая страница. Я не уверен, что, может быть, нужно показывать каждый слайд отдельно, а не презентацию в целом. Я не смог найти ничего, что указывало бы на это.

Второе, что я попробовал, было основано на аналогичном решении, которое я нашел для электронной таблицы. Я не очень понимаю, как изменение URL загружает его в формате PDF, и, возможно, это связано с проблемой, которая приводит к 404.

var presentation = SlidesApp.openById(presentationID);
var url = presentation.getUrl();
url = url.replace(/edit$/,'');
var url_ext = 'export?exportFormat=pdf&format=pdf' + '&muteHttpExceptions=true' //export as pdf
var response = UrlFetchApp.fetch(url + url_ext, {
                                   headers: {
                                   'Authorization': 'Bearer ' +  token
                                   }
                                   });

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Преобразование всех слайдов в презентации в отдельные PDF-файлы

function convertingSlideImagesToPDF() {
  var fldr=DriveApp.getFolderById("FolderID");
  var ss=SlidesApp.openById("PresentationID");
  var slds=ss.getSlides();
  var n=0;
  for(var i=0;i<slds.length;i++) {
    var sldImgA=slds[i].getImages();
    if(sldImgA) { 
      for(var j=0;j<sldImgA.length;j++) {
        var imgName=sldImgA[j].getTitle();
        var base64=Utilities.base64Encode(sldImgA[j].getBlob().getBytes());
        var html='<img src="data:image/jpg;base64,'+base64+'">';
        var blob=null;
        blob=Utilities.newBlob(html, MimeType.HTML).setName('Image' + n++ + ".pdf");
        blob=blob.getAs(MimeType.PDF);
        var file=fldr.createFile(blob);  
      }
    }
  }
}

Полезные ссылки

0 голосов
/ 17 октября 2019

Я использовал второй метод для создания PDF-файлов Google Sheets.

Следующая функция может быть адаптирована для создания PDF-файлов ваших слайдов. При этом используется API REST, поэтому вам нужно создать URL с параметрами в соответствии с тем, как вы хотите отформатировать PDF.

Ваш отформатированный URL должен выглядеть примерно так: https://docs.google.com/presentation/d/****presentationId****/export?exportFormat=pdf&format=pdf

В этой функции вы можете найти другие необязательные параметры для форматирования pdf.

function exportPDF(fileId) {
  var ss = SpreadsheetApp.openById(fileId);  
  // Base URL
  var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());
  /* Specify PDF export parameters
  From: https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579
        https://stackoverflow.com/questions/46088042/margins-parameters-for-spreadsheet-export
  */

  var url_ext = 'exportFormat=pdf&format=pdf'        // export as pdf / csv / xls / xlsx
  + '&size=letter'                       // paper size legal / letter / A4
  + '&portrait=true'                    // orientation, false for landscape
  + '&fitw=true&source=labnol'                          // fit to page width, false for actual size
  + '&top_margin=0.25'              //All four margins must be set!
  +'&bottom_margin=0.25'           //All four margins must be set!
  +'&left_margin=0.25'             //All four margins must be set!
  +'&right_margin=0.25'            //All four margins must be set!
  + '&sheetnames=false&printtitle=false' // hide optional headers and footers
  + '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
  + '&fzr=true'                         // do not repeat row headers (frozen rows) on each page
  + '&gid=';                             // the sheet's Id

  var token = ScriptApp.getOAuthToken();
  var sheet = ss.getSheets()[0]; //get first sheet

  // Converts to PDF
  var response = UrlFetchApp.fetch(url + url_ext + sheet.getSheetId(), {
      headers: {
        'Authorization': 'Bearer ' +  token
      }
    });

  //convert the response to a blob and store in our array
  var blob = response.getBlob().setName(sheet.getName() + '.pdf');
  var folderId = '**********your folder id here*******************';
  var folder = DriveApp.getFolderById(folderId);
  return folder.createFile(blob).getId();
}
...