如何通过URL

时间:2016-07-12 15:14:58

标签: javascript office365 office-js

我目前正在为Word添加Office.js,我正在尝试插入来自给定网址的图片。我正在查看Office.js文档,该文档位于:

InlinePicture object (JavaScript API for Word)

我发现它们可能具有内置功能,即通过"getBase64ImageSrc()"从img url获取base64表示。开发办公室网站上的文档有误导性或不正确。

想看看是否有人构建了一个使用"getBase64ImageSrc()"从网址插入图片的文字插件?或者我正朝着错误的方向前进。

2 个答案:

答案 0 :(得分:3)

需要详细阐述迈克的答案,以避免混淆。

Staffer901:你正在谈论这篇文章中的两个不同主题。

  1. 将图像插入文档。我认为这是你的底线问题:如何插入带有图像URL的图像。迈克尔提到的选项,基本上是为图像插入经典HTML,可以使用,但我不建议你使用它们中的任何一个。原因是因为您正在做的是存储对与Internet依赖关系有连接的图像的引用,这意味着必须连接任何使用该文档的用户才能看到图像。
  2. 我建议你做的图像插入(永久插入:))是使用range.insertInlinePictureFromBase64方法。你需要有一个额外的步骤来将URL中的图像编码为base64字符串,这是方法接受的输入参数,here是如何实现这一点的一个很好的讨论..查看下面的示例显示在文档的第一段插入InlinePicture,假设您有base64。请注意,您可以获取当前插入点并在需要时插入图片。 insertInlinePictureFromBase64 是从范围继承的任何对象的方法,如正文,段落,内容控制等。

    这是一个示例:

    // Run a batch operation against the Word object model.
    Word.run(function (context) {
    
        // Create a proxy object for the paragraphs collection.
        var paragraphs = context.document.body.paragraphs;
    
        // Queue a commmand to load the style property for all of the paragraphs.
        context.load(paragraphs);
    
        // Synchronize the document state by executing the queued commands,
        // and return a promise to indicate task completion.
        return context.sync().then(function () {
    
            // Queue a command to get the first paragraph.
            var paragraph = paragraphs.items[0];
    
            var b64encodedImg = "iVBORw0KGgoAAAANSUhEUgAAAB4AAAANCAIAAAAxEEnAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACFSURBVDhPtY1BEoQwDMP6/0+XgIMTBAeYoTqso9Rkx1zG+tNj1H94jgGzeNSjteO5vtQQuG2seO0av8LzGbe3anzRoJ4ybm/VeKEerAEbAUpW4aWQCmrGFWykRzGBCnYy2ha3oAIq2MloW9yCCqhgJ6NtcQsqoIKdjLbFLaiACnYyf2fODbrjZcXfr2F4AAAAAElFTkSuQmCC";
    
            // Queue a command to insert a base64 encoded image at the beginning of the first paragraph.
            paragraph.insertInlinePictureFromBase64(b64encodedImg, Word.InsertLocation.start);
    
            // Synchronize the document state by executing the queued commands,
            // and return a promise to indicate task completion.
            return context.sync().then(function () {
                console.log('Added an image to the first paragraph.');
            });
        });
    })
    .catch(function (error) {
        console.log('Error: ' + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            console.log('Debug info: ' + JSON.stringify(error.debugInfo));
        }
    });

    最后请注意,Michaels提到的setSelectedDataAsync方法最近更新以支持图像插入,您还需要提供图像的base64,但好处是您可以向后兼容(它也适用于2013客户端)这是一个代码示例:

    // assumes a valid base64 is provided as the first parameter.
    Office.context.document.setSelectedDataAsync(mybase64, { coercionType: 'image' }, function (result) {
                if (result.status == 'succeeded')
                    app.showNotification("Image inserted");
                else
                    app.showNotification("Error:" + result.error.message + " : " + error.name)
    
    
            })

    1. 从文档中使用图像。这是关于从文档中的现有图像中获取base64。我们有一个身体。您可以使用inlinePictures集合来获取文档中的所有图像,并使用getBase64方法获取二进制文件的base64编码表示。我想知道为什么文档中的这个令人困惑,你能详细说明吗?
    2. 我希望这很有用。 谢谢,快乐的编码! -Juan。

答案 1 :(得分:0)

要在Word中插入网址中的图片,请使用Range.insertHtml方法或Document.setSelectedDataAsync方法,具体取决于您的具体方案和目标。

看起来您链接的其他方法的文档中存在错误 - 我会确保更正,但我不相信它是您正在寻找的API。