【问题标题】:Convert PDF from Google Drive to Image and send to Telegram via Bot将 Google Drive 中的 PDF 转换为图像并通过 Bot 发送到 Telegram
【发布时间】:2021-05-03 17:31:25
【问题描述】:

目前我使用的步骤如下:

第一步 -> 从我的电子表格中创建页面 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 吗?

【问题讨论】:

    标签: pdf google-apps-script google-sheets telegram telegram-bot


    【解决方案1】:

    问题和解决方法:

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

    解决方法 1:

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

    您可以在this thread 上查看此示例脚本。

    解决方法 2:

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

    您可以在this thread 上查看此示例脚本。

    解决方法 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())
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 2018-06-07
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 2021-05-09
      • 2016-05-09
      相关资源
      最近更新 更多