Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Google Apps脚本,如何将每张演示幻灯片下载为pdf格式?_Javascript_Pdf_Google Apps Script_Google Slides - Fatal编程技术网

Javascript 使用Google Apps脚本,如何将每张演示幻灯片下载为pdf格式?

Javascript 使用Google Apps脚本,如何将每张演示幻灯片下载为pdf格式?,javascript,pdf,google-apps-script,google-slides,Javascript,Pdf,Google Apps Script,Google Slides,我对这个有点陌生,所以我为任何与新手相关的烦恼提前道歉 我想做的是创建一个包含各种图像的谷歌演示文稿,然后将每张幻灯片作为单独的pdf下载。我很难将其作为pdf文件的一部分下载。演示文稿的构造是正确的。我尝试了一些不同的方法,但还没有找到有效的解决方案。我试过的最简单的方法是: var newFolder=rootFolder.createFolder(sourceSpreadsheet.getName() + ' - Functionals').setSharing(DriveApp.Acce

我对这个有点陌生,所以我为任何与新手相关的烦恼提前道歉

我想做的是创建一个包含各种图像的谷歌演示文稿,然后将每张幻灯片作为单独的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
                                   }
                                   });


我使用了第二种方法来创建谷歌表单的PDF

以下功能可用于创建幻灯片的PDF。这使用了RESTAPI,所以这就是为什么您需要根据您想要如何格式化pdf来构造带有参数的URL

格式化后的url需要如下所示:***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();
}

我使用了第二种方法来创建谷歌表单的PDF

以下功能可用于创建幻灯片的PDF。这使用了RESTAPI,所以这就是为什么您需要根据您想要如何格式化pdf来构造带有参数的URL

格式化后的url需要如下所示:***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();
}

将演示文稿中的所有幻灯片转换为单个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);  
      }
    }
  }
}
函数转换SlideImageStopDF(){
var fldr=DriveApp.getFolderById(“FolderID”);
var ss=SlidesApp.openById(“PresentationID”);
var slds=ss.getSlides();
var n=0;

用于(var i=0;i将演示文稿中的所有幻灯片转换为单个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);  
      }
    }
  }
}
函数转换SlideImageStopDF(){
var fldr=DriveApp.getFolderById(“FolderID”);
var ss=SlidesApp.openById(“PresentationID”);
var slds=ss.getSlides();
var n=0;

对于(var i=0;我需要帮助!不幸的是,即使有URL更新,我仍然会遇到404错误。我不知道为什么。我包括了除&fzr=true之外的所有可选参数,因为演示文稿没有行标题。我记录URL,当我刚粘贴到浏览器时,它会给我一个页面未找到错误,但如果我删除所有的e额外参数它会像我预期的那样打开幻灯片。我不确定浏览器是否会接受这些参数,所以可能这是预期的。如果有用,这就是它专门记录为url+url\u ext+id的内容:谢谢帮助!不幸的是,即使有url更新,我仍然会遇到404错误。我不确定为什么。我包括了除&fzr=true之外的所有可选参数,因为演示文稿没有行标题。我记录了url,当我刚刚粘贴到浏览器时,它会给我一个页面未找到错误,但如果我删除所有额外参数,它会像我预期的那样打开幻灯片。我不确定浏览器是否会接受这些参数,因此ybe这是预期的吗?如果有帮助的话,这就是它专门记录为url+url\u ext+id的内容:非常感谢。我尝试了一下,奇怪的是,我在var sldImgA=slds[I]行上发现了一个页面找不到错误。getImages()我甚至不完全确定它指的是哪一页。我在这一点之前调整了实际幻灯片,所以我不认为它可能是指的幻灯片,但如果不是,那可能是什么?我添加了一张没有任何图像的幻灯片,也没有引起任何问题。你所有的图像都是jpg吗?再试一次。我检查了一下sldImgA是否有问题是在现在使用之前定义的。仍然不走运。看起来错误实际上发生在声明变量的新if语句上方。这是一个“未找到页”错误,在幻灯片中引用幻灯片时,这似乎是一个奇怪的错误,对吗?如果您可以设置一个示例电子表格并在其中加载脚本,我将为您调试它。不幸的是,您还必须共享幻灯片演示文稿或至少一个显示相同问题的演示文稿。非常感谢。我尝试了这个,奇怪的是,我得到了在var sldImgA=slds[i].getImages()行上找不到页面错误我甚至不完全确定它指的是哪一页。我在这一点之前调整了实际幻灯片,所以我不认为它可能是指的幻灯片,但如果不是,那可能是什么?我添加了一张没有任何图像的幻灯片,也没有引起任何问题。你所有的图像都是jpg吗?再试一次。我检查了一下sldImgA是否有问题是在现在使用之前定义的。仍然不走运。看起来错误实际上发生在声明变量的新if语句上方。这是一个“未找到页”错误,对于在幻灯片中引用幻灯片来说,这似乎是一个奇怪的错误,对吗?如果您可以设置一个示例电子表格并在其中加载脚本,我将为您调试它。不幸的是,您还必须共享幻灯片演示文稿或至少一个显示相同问题的演示文稿。