我对此有些陌生,因此对于任何与newb相关的烦恼,我都深表歉意。

我想做的是用各种图像创建一个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
                                   }
                                   });

最佳答案

我使用第二种方法来创建Google表格的pdf。

以下功能可以调整为创建幻灯片的pdf。这使用了REST API,这就是为什么您需要根据想要格式化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();
}

关于javascript - 使用Google Apps脚本,如何将每个演示文稿幻灯片下载为pdf?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58436033/

10-16 14:03