2013-12-11 30 views
5

* Mam dokument Google z ciągiem takim jak "tekst {logo} tekst" Jak umieścić obraz w miejscu {logo}? Do tej pory próbowałem:wstaw obraz w określonym punkcie akapitu

var logoElement = s.findText("{logo}").getElement(); 
logoElement.getParent().insertInlineImage(0,logoBlob); 
s.replaceText("{logo}", ""); 

Ale ta wstawia obraz przed znaleziony punkt (lub 1: po). Jak umieścić go w akapicie w dokładnej lokalizacji?

+0

Widziałeś ten post? http://stackoverflow.com/questions/11211434/insert-image-into-a-specified-location –

+0

czytaj również komentarze. –

+1

Serge, post (i komentarze) określa wyszukiwany ciąg "MUSI być sam" w akapicie. Moje pytanie dotyczy łańcucha wyszukiwania * w środku * akapitu, gdzie * tylko * ta część jest zamieniana. Mój przykład nie ma problemu ze znalezieniem ciągu wyszukiwania, ale umieszcza obraz przed (lub po) całym akapitem, zamiast umieszczać go przed dokładnie takim ciągiem wyszukiwania. – wivku

Odpowiedz

1

Dzięki komentarzowi Serge'a i oryginalnemu wpisowi linku do wskazania mi właściwego kierunku. Oto co mam teraz:

var s = d.getHeader(); 
var logoResult = s.findText("{logo}"); // search result 
var logoElement = logoResult.getElement(); // the paragraph that contains the placeholder 
var text = logoElement.getText(); 
var placeholderStart = logoResult.getStartOffset(); // character position start placeholder 
var placeholderEnd = logoResult.getEndOffsetInclusive(); // char. position end placeholder 
var parent = logoElement.getParent(); 
var parPosition = parent.getChildIndex(logoElement); 

// add new paragraph after the found paragraph, with text preceding the placeholder 
var beforeAndLogo = s.insertParagraph(parPosition+2, text.substring(0, placeholderStart)); 
var logo = beforeAndLogo.appendInlineImage(logoBlob); // append the logo to that new paragraph 

// add new paragraph after the new logo paragraph, containing the text after the placeholder 
var afterLogo = s.insertParagraph(parPosition+3, text.substring(placeholderEnd+1)); 
afterLogo.merge(); // merge these two paragraphs 

// finally remove the original paragraph 
parent.removeFromParent(); // remove the original paragraph 

To nie jest kompletna, należy również skopiować wszystkie atrybuty. Co ważniejsze, nie kopiuje ustawień karty (np. Zakładki środkowej). Nie znalazłem sposobu na ustawienie pozycji tabulatora.

+0

Czy znalazłeś sposób na skopiowanie atrybutów? Pracowałem nad tym problemem i wydaje mi się, że nawet getAttributes() nie stosuje ich poprawnie. –

2

Próbowałem prostszą wersję opartą na odpowiedź, która utrzymuje format oryginału ust ...

spróbować, to nie jest „niezawodny”, ale to działa w moim badaniu i jest (chyba) interresting trial ;-)

kod

tutaj:

function test(){ 
    placeImage('{logo}','0B3qSFd3iikE3SkFXc3BYQmlZY1U'); 
//This is my page and I’d like to have a {logo} on it right here 
} 


function placeImage(placeHolder,imageId) { 
    var logoBlob = DocsList.getFileById(imageId).getBlob(); 
    var d = DocumentApp.getActiveDocument() 
    var s = d.getHeader(); 
    var logoResult = s.findText(placeHolder); 
    var placeholderStart = logoResult.getStartOffset(); 
    var par = s.getChild(0).asParagraph(); 
    var parcopy = par.copy(); 
    var parLen = par.editAsText().getText().length-1; 
    Logger.log('placeholderStart = '+placeholderStart+' parLen = '+parLen) 
    par.editAsText().deleteText(placeholderStart, parLen); 
    parcopy.editAsText().deleteText(0, placeholderStart+placeHolder.length); 
    var img = s.getChild(0).appendInlineImage(logoBlob); 
    s.appendParagraph(parcopy); 
    parcopy.merge(); 
} 

enter image description here

+0

Czy to nie usuwa atrybutów formatowania w odczytywanej części tekstu? –

3

mam nadzieję, że będą pomocne, Poniższy kod jest w porządku ze mną.

function insertImage(doc) { 
    // Retrieve an image from the web. 
    var resp = UrlFetchApp.fetch("http://www.google.com/intl/en_com/images/srpr/logo2w.png"); 
    var image = resp.getBlob(); 
    var body = doc.getBody(); 
    var oImg = body.findText("<<Logo1>>").getElement().getParent().asParagraph(); 
    oImg.clear(); 
    oImg = oImg.appendInlineImage(image); 
    oImg.setWidth(100); 
    oImg.setHeight(100); 
} 
+0

Ta odpowiedź jest piękna w przypadku bardziej ogólnego problemu. Gratulacje - i wielkie dzięki! - o urodzie i szybkim kodzie! –

Powiązane problemy