Google Apps Script (Javascript) - findText returns location relative to inline image, not start of paragraph -
i trying insert image in middle of paragraph results of findtext, when there other images before in paragraph doesn't work planned.
currently, code(partially based on the responses question) works finding place needs inserted, getting child index of paragraph findtext() returned. however, if there inline image, chid index returned start of paragraph, offset findtext characters end of image, not start of paragraph.
here relevant part of script:
function placeimage(start, end) { var d = documentapp.getactivedocument() var s = d.getbody(); var logoresult = s.findtext(start); var placeholderstart = logoresult.getstartoffset(); //position of image insertion var logoresult2 = s.findtext(end, logoresult); var placeholderend = logoresult2.getstartoffset(); //text between placeholderstart , placeholderend permanently deleted var textelement = logoresult.getelement(); var paragraph= textelement.getparent(); var childindex = paragraph.getparent().getchildindex(paragraph); //gets paragraph number var par = s.getchild(childindex).asparagraph(); //entire paragraph containing point of insertion var parcopy = par.copy(); var totallen = par.editastext().gettext().length-1; par.editastext().deletetext(placeholderstart, totallen); //delete text after insertion point; added later parcopy parcopy.editastext().deletetext(0, placeholderend + 1); //this remaining text gets pasted @ end var resp = urlfetchapp.fetch("https://www.google.com/images/srpr/logo11w.png"); var logoblob = resp.getblob(); var img = s.getchild(childindex).appendinlineimage(logoblob); var tomerge = s.insertparagraph(childindex+1, parcopy); tomerge.merge(); return 1; }
a paragraph contains several child elements e.g. strings of text or images. need index of text element inside paragraph, not index of paragraph inside document. try this
function placeimage(start, end) { var d = documentapp.getactivedocument() var s = d.getbody(); var logoresult = s.findtext(start); var placeholderstart = logoresult.getstartoffset(); //position of image insertion var logoresult2 = s.findtext(end, logoresult); var placeholderend = logoresult2.getendoffsetinclusive(); //text between placeholderstart , placeholderend permanently deleted var textelement = logoresult.getelement(); var text = textelement.gettext(); var paragraph = textelement.getparent(); var childindex = paragraph.getchildindex(textelement); //gets index of text element in paragaph var textsecondhalf = text.substring(placeholderend + 1); textelement.deletetext(placeholderstart, text.length-1); paragraph.inserttext(childindex+1, textsecondhalf); var resp = urlfetchapp.fetch("https://www.google.com/images/srpr/logo11w.png"); var logoblob = resp.getblob(); paragraph.insertinlineimage(childindex+1, logoblob); }
Comments
Post a Comment