3

考虑由接下来的 3 行表示的文档。

..一些文字..
6 7 8 9 10 11
..一些文字..

想象一下,所有数字都是它们各自的字体大小(即 10 是字体大小 10)。现在我想在 8 到 9 之间的空间中插入一个内联图像,并删除该空间,但不破坏未受影响文本的格式(本示例中的大小)。结果将是

..一些文字..
6 7 8 <这里有一些图片>9 10 11
..一些文字..

但是,当我尝试

function placeImage() {
  var s = DocumentApp.getActiveDocument().getBody();

  //Find in Document
  var found = s.findText("8");
  if(found==null)
    return 0; 
  var foundLocation = found.getStartOffset(); //position of image insertion

  //Get all the needed variables
  var textAsElement = found.getElement(); 
  var text = textAsElement.getText();
  var paragraph = textAsElement.getParent();
  var childIndex = paragraph.getChildIndex(textAsElement);  //gets index of found text in paragraph

  //Problem part - when removing the space, destroys all formatting
  var textRemaining = text.substring(foundLocation + 2);
  textAsElement.deleteText(foundLocation, text.length-1);
  if(textRemaining != "")
      paragraph.insertText(childIndex+1, textRemaining);//destroys formatting for the rest of the child index

  //Insert image
  var imgSource = UrlFetchApp.fetch("https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Red_information_icon_with_gradient_background.svg/48px-Red_information_icon_with_gradient_background.svg.png");
  var ingBlob = imgSource.getBlob();
  paragraph.getChild(childIndex+1).insertInlineImage(foundLocation, ingBlob);
}

问题是当我删除空格并在段落中创建另一个子元素以插入图像时,子字符串也会删除剩余的文本格式。我曾尝试研究 copy(),但我不确定它如何有效地工作。

我研究了许多其他地方,这里的两个答案都没有保留格式,并且 position.insertInlineImage() 似乎被破坏了,如此处所问。

4

1 回答 1

1

它基本上取决于文档的内容如何设置段落。尝试使用文档中的简单内容并插入图像。

它很好地插入了图像,也没有改变其余文本的格式。

检查下面的代码:

function placeImage()
 {
 var s = DocumentApp.getActiveDocument().getBody();
 var number = '8'
 //Find in Document
 var found = s.findText(number);
 if(found==null)
   return 0; 
 var foundLocation = found.getStartOffset(); //position of image insertion

 //Get all the needed variables
 var textAsElement = found.getElement(); 
 var text = textAsElement.asText().copy();// getText();
 textAsElement.editAsText().deleteText(foundLocation + number.length  ,textAsElement.asText().getText().length -1)

text.asText().editAsText().deleteText(0, foundLocation + 1 );
 //Insert image
 var imgSource = UrlFetchApp.fetch('https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Red_information_icon_with_gradient_background.svg/48px-Red_information_icon_with_gradient_background.svg.png');
 var ingBlob = imgSource.getBlob();

 var children =DocumentApp.getActiveDocument().getBody().getChild(0).asParagraph().appendInlineImage(ingBlob);

 DocumentApp.getActiveDocument().getBody().getChild(0).asParagraph().appendText(text);

 var child = DocumentApp.getActiveDocument().getBody().getNumChildren();


}

测试的文档内容为:

6 7 8 9 10 11

(文本的大小与您提到的相似。'8' 是大小 8,依此类推)

您必须根据文档内容使用试错法进行测试。

希望有帮助!

于 2015-07-20T23:42:34.420 回答