Есть ли способ получить изображение QR-кода с помощью скрипта Google Apps, используя метод POST API Google Charts? - PullRequest
1 голос
/ 19 июня 2019

Я использую Google Script для создания билетов на событие, и билет включает в себя QR-код, который идет по предварительно заполненной ссылке Google Form.Поскольку она предварительно заполнена, строка довольно длинная, и API Google Charts для создания QR-кодов не будет принимать текстовую строку, которая долго используется GET-запросом, но я не могу найти документацию о том, как кодировать POST-запросв скрипте приложений.Как сгенерировать POST-запрос в скрипте приложений, который будет возвращать изображение QR-кода, которое я затем смогу вставить в документ?

Я уже попробовал GET-запрос, и он усекает URL-адрес перед его кодированием вQR-код.Это приводит меня к форме Google, но не к предварительно заполненной версии, которую генерирует ссылка (на самом деле довольно умно со стороны Google, когда она усекает строку в месте, которое все еще дает пригодный для использования URL, но это на другой день ...)

Я также пытался с помощью HtmlService отобразить QR-код, используя метод POST с API-интерфейсом Charts в форме HTML, которая автоматически отправляется при загрузке этого HTML-кода.Если я использую showSidebar (), это откроет изображение на новой вкладке, но я не выяснил, как вернуть это изображение, чтобы его можно было вставить в документ.

Я также пыталсяСоздание BLOB-объекта с HTML, а затем сохранение 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 выдает ошибку, в которой говорится, что это «Недопустимо».данные изображения ", что имеет смысл - но как мне преобразовать их в изображение, или есть ли лучший или более простой способ, которым я мог бы сделать это?

1 Ответ

0 голосов
/ 20 июня 2019

Вам нужно получить код qr в скрипте приложений, а не в браузере:

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