post - 有没有办法使用 Google Charts API 的 POST 方法通过 Google Apps Script 获取二维码图像?

标签 post google-apps-script charts google-visualization qr-code

我正在使用 Google 脚本生成事件门票,门票包含一个 QR 代码,该代码可转到预先填写的 Google 表单链接。由于它是预填充的,因此字符串很长,并且用于创建 QR 码的 Google Charts API 不会接受使用 GET 请求的那么长的文本字符串,但我找不到任何有关如何对 POST 请求进行编码的文档进入 Apps 脚本。如何在 Apps 脚本中生成一个 POST 请求,该请求将返回二维码的图像,然后我可以将其插入到文档中?

我已经尝试过 GET 请求,它在将 URL 编码为二维码之前截断了 URL。这让我进入了谷歌表单,但不是链接生成的预填充版本(实际上谷歌非常聪明,让它在仍然提供可用 URL 的地方截断字符串,但那是另一天...... )

我还尝试过 HtmlService 使用 POST 方法和图表 API 在 HTML 表单中呈现二维码,该表单在加载该 HTML 时自动提交。如果我使用 showSidebar(),这将在新选项卡中打开图像,但我还没有弄清楚如何返回该图像以便将其插入到文档中。

我还尝试使用 HTML 创建一个 blob,然后将 blob 保存为 PNG,但根据我所做的研究,.getAs() 方法在转换 HTML 时不会呈现图像。

renderQR 函数:

function renderQR(inputUrl) {
  var html = HtmlService.createTemplateFromFile('QREncode.html');
  html.url = inputUrl;  
  var rendered = html.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setHeight(300)
    .setWidth(300);
 return rendered;   
}

QREncode.html 文件:
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script type='application/javascript'>
    // Send the POST when the page is loaded,
    // which will replace this whole page with the retrieved chart.
    function loadGraph() {
      var frm = document.getElementById('post_form');
      if (frm) {
       frm.submit();
      }
    }
    </script>
  </head>
  <body onload="loadGraph()">
    <form action='https://chart.googleapis.com/chart' method='POST' id='post_form'>
       <input type='hidden' name='cht' value='qr' />
      <input type='hidden' name='chl' value='<?= url ?>' />
      <input type='hidden' name='chs' value='300x300' />
      <input type='submit'/>
    </form>    
  </body>
</html>

当我将 renderQR() 函数的返回值视为图像时,Apps 脚本给出一个错误,指出它是“无效的图像数据”,这是有道理的——但是我如何将其转换为图像,或者有更好的方法吗?或更简单的方式我可以这样做吗?

最佳答案

您需要在 Apps 脚本中获取二维码,而不是在浏览器中:

  var imageData = UrlFetchApp.fetch('https://chart.googleapis.com/chart', {
    'method' : 'post',
    'payload' : {
      'cht': 'qr',
      'chl': 'https://google.com',
      'chs': '300x300'
  }}).getContent();

关于post - 有没有办法使用 Google Charts API 的 POST 方法通过 Google Apps Script 获取二维码图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56673358/

相关文章:

JQuery POST 请求转换为 OPTIONS。为什么?

angularjs - 将 AngularJS 表单发布到 NodeJS Express(错误请求)

php - 验证复选框是否被选中

javascript - 将外部 javascript 导入到 google apps 脚本

javascript - NumberRangeFilter slider 显示一个或多个参与者在从左侧寻找栏时未能绘制()错误?

php - Safari 中 <form> 的问题 - 只有第一次点击才会 POST 到 _blank 目标

google-apps-script - 来自 Google Apps 脚本的小写形式的 GetValues

javascript - 有没有可以使用 google api 来监控 google 电子表格中的更改的服务?

c# - 图表 c# 的打印预览

excel - 如何在水平条形图中添加垂直线?