用Office-js替换图片

时间:2016-08-02 20:23:14

标签: office365 office-js

背景资讯

目前正在处理office-js add,它将用于修改文档中的内嵌图像。

问题

理想情况是选择已在文档中的特定图像并将其替换为另一图像。现在理想我想我可以点击图像并运行var range = context.document.getSelection();以加载选择,但我无法加载所选图像并将其替换为新图像。除非我真的清除它。

代码

Word.run(function (context) {
        var range = context.document.getSelection();
        context.load(range)
        return context.sync().then(function () {           
            range.insertInlinePictureFromBase64(base64, Word.InsertLocation.replace);
            console.log('Added base64 encoded text to the beginning of the range.');
        });
    })

更新

这段代码能够将图像插入到我想要的位置,但是当我尝试添加大小调整时,我收到以下错误。

更新代码

function insertImageToDoc(base64, selectedContent) {
    Word.run(function (context) {

        var range = context.document.getSelection();
        var paragraphs = range.paragraphs;
        context.load(paragraphs);

        return context.sync().then(function () {

            var para = paragraphs.items[0];
            var image = para.insertInlinePictureFromBase64(base64, Word.InsertLocation.replace);
            image.width = selectedContent.ImageWidth;
            image.height = selectedContent.Imageheight;              
        });
    })
};

此代码给我的错误

enter image description here

1 个答案:

答案 0 :(得分:1)

您不需要删除图片。你只需要更换它。

一些建议:

  1. 对于任何给定的范围,您都可以访问inlinePictures集合,因此您的第一条指令是获取选择内容以及其中的所有inlinePictures。
  2. 一旦你拥有了它,你可以遍历集合,当你遍历集合中的图像时,你可以得到原始的宽度和高度,如果需要可以在以后使用它,也许你想保留doc结构,为此需要知道现有的图像大小,您还可以获得图像中的其他属性(即alt标题和描述,如果您想标记特定图像,则非常有用)。
    1. 最后你的代码看起来没问题,你可以使用"替换"来调用insertInlinePictures。 insertLocation,您唯一缺少的部分是您需要再次调用context.sync,以便Word执行该指令。
  3. 以下是我提到的所有内容的示例代码:

    
    
    Word.run(function (context) {
                // here is how you access the inline pictures on the selection:
                var myImages = context.document.getSelection().inlinePictures;
                context.load(myImages);
    
                return context.sync().then(function () {
                    if (myImages.items.length > 0) {
                        for (var i = 0; myImages.items.length; i++) {
                            //you could get the current image with and height if needed, so you replace use the same real estate.
                            var currentHeight = myImages.items[i].height;
                            var currentWidth = myImages.items[i].width;
    // this is the instruction to replace the image:
                            var myNewImage = myImages.items[i].insertInlinePictureFromBase64(ImageBase64(), "replace");
                            return context.sync()  // very important you need to context.sync again
    
    
    
                        }
                    }
    
                });
            }).catch(function (e) {
                app.showNotification(e.message);
    
            })