【问题标题】:How can I replace an image in Google Documents?如何替换 Google 文档中的图片?
【发布时间】:2018-03-30 08:37:43
【问题描述】:

我正在尝试将图像从附加组件插入到 Google 文档(稍后将使用其他 GSuite 应用程序)。当 getCursor() 返回有效位置时,我已成功获取图像并将其插入。当有一个选择(而不是光标)时,如果它是通过走到所选文本的父级并在段落开头插入图像来选择的文本(不完美,但可以),我可以成功。

更新:似乎我使用了一种已弃用的方法 (getSelectedElements()),但这并没有解决问题。似乎问题也仅限于 wrapped 图像(我没有意识到当您将其更改为包装文本时对象的类型发生了变化)。

但是,当一个包装文本图像(可能是 PositionedImage)被突出显示(旋转和调整大小手柄以蓝色可见)时,getSelection()getCursor() 都会返回 null。这是一个问题,因为我希望能够获取该图像并将其替换为我正在插入的图像。

这是我的代码...任何帮助都会很棒。

var response = UrlFetchApp.fetch(imageTokenURL);
var selection = DocumentApp.getActiveDocument().getSelection();
if (selection)
{
  Logger.log("Got Selection");
  var replaced = false;
  var elements = selection.getRangeElements();
  if (elements.length === 1
      && elements[0].getElement().getType() === DocumentApp.ElementType.INLINE_IMAGE)
  {
    //replace the URL -- this never happens
  }
  //otherwise, we take the first element and work from there:
  var firstElem = elements[0].getElement();
  Logger.log("First Element Type = " + firstElem.getType());
  if (firstElem.getType() == DocumentApp.ElementType.PARAGRAPH)
  {
    var newImage = firstElem.asParagraph().insertInlineImage(0, response);
    newImage.setHeight(200);
    newImage.setWidth(200);
  }
  else if (firstElem.getType() == DocumentApp.ElementType.TEXT)
  {
    var p = firstElem.getParent();
    if (p.getType() == DocumentApp.ElementType.PARAGRAPH)
    {
      var index = p.asParagraph().getChildIndex(firstElem);
      var newImage = p.asParagraph().insertInlineImage(index, response);
      newImage.setHeight(200);
      newImage.setWidth(200);
    }
  }
} else {  
  Logger.log("Checking Cursor");
  var cursor = DocumentApp.getActiveDocument().getCursor();
  if (cursor)
  {
    Logger.log("Got Cursor: " + cursor);
    var newImage = cursor.insertInlineImage(response);
    var p = cursor.getElement();
    var size=200;

    newImage.setHeight(size);
    newImage.setWidth(size);
  }
}

【问题讨论】:

    标签: image google-apps-script google-docs


    【解决方案1】:

    您正在使用 Range 类的已弃用的“getSelectedElements()”方法。您可能会注意到它在自动完成选择框中被划掉了。 相反,请使用“getRangeElements()”方法。在文档中选择图像后,下面的代码对我有用:

      var range = doc.getSelection();
    
      var element = range.getRangeElements()[0].getElement();
    
      Logger.log(element.getType() == DocumentApp.ElementType.INLINE_IMAGE); //logs 'true'
    

    【讨论】:

    • 虽然我确实使用了不推荐使用的方法,但这并没有改变结果。我相信正在发生的事情是将图像设置为“换行”会改变对象的类型。所以我看到的是 InlineImages 对象变成了 PositionedImage 对象。这些不是作为选择或光标返回的内容。我会更新问题
    • 如果你所说的“结果”是指“getSelection()”返回“null”,我就没有主意了。我在选定的 InlineImage 实例上测试了上面的代码,它运行良好。
    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多