2013-12-11 22 views
5

* Ich habe ein Google-Dokument mit einer Zeichenfolge wie "text {logo} text" Wie platziere ich ein Bild wo {logo} ist? Bisher habe ich versucht:Bild an bestimmter Stelle des Absatzes einfügen

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

Aber das fügt das Bild vor den gefundenen Absatz (oder mit 1: nach). Wie platziere ich es innerhalb der Absatz an der genauen Stelle?

+0

Kennen Sie diesen Beitrag? http://StackOverflow.com/Questions/11211434/Insertion-Image-into-Aspecified-Location –

+0

Lesen Sie auch die Kommentare. –

+1

Serge, der Post (und Kommentare) gibt die Suchzeichenfolge "MUSS allein sein" in einem Absatz an. Meine Frage bezieht sich auf einen Suchstring * in der Mitte * eines Absatzes, wobei * nur * dieser Teil ersetzt wird. Mein Beispiel hat keine Probleme, die Suchzeichenfolge zu finden, aber es platziert das Bild vor (oder nach) dem ganzen Absatz, anstatt es genau vor die Suchzeichenfolge zu setzen. – wivku

Antwort

1

Dank dem Kommentar von Serge und dem ursprünglichen Post des Links für mich in die richtige Richtung. Hier ist, was ich habe jetzt:

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 

Es ist nicht abgeschlossen ist, habe ich auch alle Attribute kopieren sollte. Noch wichtiger, es kopiert nicht die Tab-Einstellungen (z. B. die mittlere Registerkarte). Ich habe keine Möglichkeit gefunden, Tabulatorpositionen festzulegen.

+0

Haben Sie eine Möglichkeit gefunden, Attribute zu kopieren? Ich habe an diesem Problem gearbeitet, und es scheint, dass sogar getAttributes() sie nicht korrekt anwendet. –

2

ich eine einfachere Version auf Ihre Antwort anhand versucht, die das Format des ursprünglichen Absatzes hält ...

Probieren Sie es, es ist nicht „narrensicher“, aber es funktioniert in meinem Test und ist (glaube ich) ein interresting Versuch ;-)

Code hier:

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

Entfernt das nicht Formatierungsattribute innerhalb des readded Teils des Textes? –

3

ich hoffe, hilfreich sein wird, der folgende Code ist für mich in Ordnung.

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

Diese Antwort ist für ein allgemeineres Problem schön. Glückwunsch - und vielen Dank! - auf Schönheit und schnellen Code! –

Verwandte Themen