如何将图像和文本合并到谷歌驱动器中的一个blob中

时间:2014-11-09 00:32:12

标签: google-apps-script google-drive-api

我正在尝试使用Google应用脚本创建自己的条形码标签。我能够检索条形码的图像blob,但我希望能够为其添加另一行文本。是否可以组合或编辑图像blob?如果是这样的话怎么会这样做。

这是我目前获取条形码的代码。

function createLabel() {
  var url = "http://www.barcodesinc.com/generator/image.php?code=20-001-001&style=196&type=C128B&width=200&height=100&xres=1&font=3"
  var image = UrlFetchApp.fetch(url).getBlob();
  DriveApp.createFile(image);
}

我知道条形码下面有数据,但是我需要让这个数字更大更容易阅读。

我尝试过创建一个文档并插入文本和图像,但它只是打印,就像我需要打印一样。

2 个答案:

答案 0 :(得分:1)

Google尚未在Apps脚本中提供任何图像处理方法。也许当Google Draw支持应用程序脚本时,您可以使用一些东西以编程方式将图像插入到图形中并向其中添加文本,但是现在您必须创建自己的临时解决方案。

您没有指定最终目标是什么 - 一张相同的标签,一张不同的标签或一个标签显示在屏幕上供用户保存/下载。但是这里有一些想法尝试:

  1. 创建一个1页的Google文档,其中包含一个表格 印刷完全适合您的标签。你可能不得不修补 具有边距,表格和单元格尺寸,边框等,以使其适合 标签。此文档将是您的模板。你的脚本会创建一个 此文档的副本,并将条形码图像和文本插入到 表格细胞。研究Google Apps Script Drive ServiceGoogle Apps Script Document Service 您可以在代码中使用的方法的参考。
  2. 如果您的目标是为用户屏幕显示单个标签输出 保存/下载,探索HTML5 Canvas元素和/或Canvas-或 用于绘制图像的SVG操作客户端JavaScript库 在屏幕上并向其添加文本。我没有用过这些技巧 很多,所以无法推荐确定的资源,但请参阅this SO question 对于初学者。还可以看看这些js库: EaselJSHTML Canvas Javascript LibraryFabric.js
  3. 最后注意事项:您正在使用的条形码生成器--barcodesinc.com - 允许您生成没有文本和/或边框的条形码。这可能就是你想要的标签 - 没有必要在你的标签上加上两次代码文字。

答案 1 :(得分:0)

这是我目前针对自己问题的解决方案。使用HtmlService我能够创建"文档"我需要的。并打印出来。 html的打印票据和样式需要一些微调,但这可以起作用。

" CloudPrintLib"是Google Cloud Print with Apps Script的连接解决方​​案,请参阅此博客文章以供参考。 http://ramblings.mcpher.com/Home/excelquirks/guests/cloudprint

function createLabelDoc() {
  var url = "http://www.barcodesinc.com/generator/image.php?code=20-001-001&style=196&type=C128B&width=200&height=100&xres=1&font=3";
  var html = HtmlService.createHtmlOutput().setTitle('HtmlAlseLabel');
  html.append('<p>20-001-001</p><br>');
  html.append('<img src="http://www.barcodesinc.com/generator/image.php?code=20-001-001&style=196&type=C128B&width=200&height=100&xres=1&font=3"/>')
  //DriveApp.createFile(html.getBlob().setName('HTMLBarcode'));

  var ticket = {
        version: "1.0",
        print: {
          duplex: {
            type: "NO_DUPLEX"
          }
        }
      }


  Logger.log(CloudPrintLib.submit("printeridhere", html.getTitle(), ticket, html.getBlob()));
}

感谢azawaza帮助思考这个问题。