Search code examples
pdfgoogle-apps-scriptgoogle-sheets

Change document orientation when exporting to PDF


I have this script that emails the content of a speadsheet to all the collaborators on a regular basis.

function myFunction() {
  var document = SpreadsheetApp.openById("123documentid456");

  var editors = document.getEditors();
  for(var i = 0; i < editors.length; i++){
    MailApp.sendEmail(editors[i].getEmail(), "Subject", "Some message", {
      attachments : [document.getAs(MimeType.PDF)]
    });
  }
}

It creates a PDF and emails it. The thing is the content does not display nicely as the PDF's orientation is portrait. Is there any way to make it export to landscape?


Solution

  • From here, this code could help

    *************************************************
    
    function savePDFs() {
      SpreadsheetApp.flush();
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
    
      var url = ss.getUrl();
    
      //remove the trailing 'edit' from the url
      url = url.replace(/edit$/,'');
    
      //additional parameters for exporting the sheet as a pdf
      var url_ext = 'export?exportFormat=pdf&format=pdf' + //export as pdf
      //below parameters are optional...
      '&size=letter' + //paper size
      '&portrait=false' + //orientation, false for landscape, true for portrait
      '&fitw=true' + //fit to width, false for actual size
      '&sheetnames=false&printtitle=false&pagenumbers=false' + //hide optional headers and footers
      '&gridlines=false' + //hide gridlines
      '&fzr=false' + //do not repeat row headers (frozen rows) on each page
      '&gid=' + sheet.getSheetId(); //the sheet's Id
    
      var token = ScriptApp.getOAuthToken();
    
      var response = UrlFetchApp.fetch(url + url_ext, {
          headers: {
            'Authorization': 'Bearer ' +  token
          }
        });
    
      var blob = response.getBlob().setName(sheet.getName() + '.pdf');
    
      //from here you should be able to use and manipulate the blob to send and email or create a file per usual.
      //In this example, I save the pdf to drive
    
      DocsList.createFile(blob);
      //OR DriveApp.createFile(blob);
    }
    
    *************************************************
    

    Notice this bit: '&portrait=false' + //orientation, false for landscape, true for portrait