1

目前我使用的一步一步如下:

第一步 ->Jogos na TV从我的电子表格创建页面的 PDF:

function CreatePDF() {
  var ss = SpreadsheetApp.getActive();
  SpreadsheetApp.flush();
  var theurl = 'https://docs.google.com/a/mydomain.org/spreadsheets/d/' +
      'ID CODE TO SPREADSHEET' +
        '/export?format=pdf' +
          '&size=0' +
            '&portrait=true' +
              '&fitw=true' + 
                '&top_margin=0' +            
                  '&bottom_margin=0' +         
                    '&left_margin=0' +        
                      '&right_margin=0' +     
                        '&sheetnames=false&printtitle=false' +
                          '&pagenum=false' +
                            '&gridlines=false' +
                              '&fzr=FALSE' +
                                '&gid=' +
                                  'ID CODE TO SPREADSHEET PAGE';
  
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(theurl, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdfBlob = docurl.getBlob();
  
  //...get token and Blob (do not create the file);
  
  var fileName = ss.getSheetByName("Jogos na TV").getRange("A1").getValue();
  
  //Access or create the 'PDF' folder;
  var folder;
  var folders = DriveApp.getFoldersByName("PDF");
  if(folders.hasNext()) {
      folder = folders.next();
    }else {
      folder = DriveApp.createFolder("PDF");
    }
  
  //Remove duplicate file with the same name;
  var existing = folder.getFilesByName(fileName);
  if(existing.hasNext()) {
      var duplicate = existing.next();
      if (duplicate.getOwner().getEmail() == Session.getActiveUser().getEmail()) {
        var durl = 'https://www.googleapis.com/drive/v3/files/'+duplicate.getId();
        var dres = UrlFetchApp.fetch(durl,{
          method: 'delete',
          muteHttpExceptions: true,
          headers: {'Authorization': 'Bearer '+token}
        });
        var status = dres.getResponseCode();
        if (status >=400) {
          
        } else if (status == 204) {
          folder.createFile(pdfBlob.setName(fileName));
        }
      }
    } else {
      folder.createFile(pdfBlob.setName(fileName));
    }
}

第二步 -> 手动复制在 Google Drive 中创建的 PDF 链接

第三步 -> 我将带有 PDF 缩影的文本发送到我在 Telegram 上的小组:

function EnviarTelegram(botSecret, chatId, photoUrl, caption) {
  var response = UrlFetchApp.fetch("https://api.telegram.org/bot" + botSecret + "/sendPhoto?caption=" + encodeURIComponent(caption) + "&photo=" + encodeURIComponent(photoUrl) + "&chat_id=" + chatId + "&parse_mode=HTML");
}

通过电子表格发送到 Telegram 的当前公式:

=EnviarTelegram("botSecret","chatId","Url to PDF","Programação de jogos na TV

"&TEXT('Jogos Hoje'!B1,"DD/MM/YYYY")&" e "&TEXT('Jogos Amanhã'!B1,"DD/MM/YYYY"))

为 PDF 创建的缩略图被剪切,因此发送到 Telegram 的图像也被剪切,电子表格不能保存为图像,只能保存为文档或 PDF。

有什么方法可以自动将 PDF 转换为图像并能够发送到 Telegram?

4

1 回答 1

2

问题和解决方法:

遗憾的是,Google Apps Script 的方法中没有直接将 PDF 格式转换为图像数据的方法。因此,在这种情况下,我认为需要使用变通方法来实现您的目标。

解决方法 1:

在此解决方法中,使用了外部 API。当您想直接将 PDF 数据转换为图像数据时,使用外部 API 怎么样?参考

您可以在此线程中查看此示例脚本。

解决方法 2:

在此解决方法中,工作表范围将导出为图像。当我看到您的电子表格时,似乎 Google 电子表格中表格的数据范围被导出为 PDF 数据。在这种情况下,作为另一种解决方法,如何将电子表格的范围转换为图像?

您可以在此线程中查看此示例脚本。

解决方法 3:

在此解决方法中,PDF 数据使用sendDocument. Ref在这种情况下,似乎需要将数据发送为multipart/form-data. 示例脚本如下。

示例脚本:
var url = "https://api.telegram.org/bot" + botSecret + "/sendDocument?chat_id=" + chatId;
var blob = DriveApp.getFileById("### file ID of PDF file ###").getBlob();
var res = UrlFetchApp.fetch(url, {method: "post", payload: {document: blob}});
console.log(res.getContentText())

参考:

于 2021-01-30T00:53:47.443 回答