尝试调整插入的图像大小时出错

Getting error when trying to resize an inserted image

背景

正在处理正在 word 中使用的任务窗格添加。我目前具有将图像插入 word 文档的功能,但是在处理较大的文档时,我的功能无法正确完成工作。它将图像放在文档的开头或结尾。

问题

我正在寻找让用户 select 在他们想要图像的地方插入图像的功能。这意味着在一个 10 页的 .docx 中,如果用户想要将图像放在第三页的两个段落之间,它就会放在那里;不在 .docx

的开头或结尾

重要

我目前使用的功能允许我为要插入的图像指定高度和宽度。我需要能够给图像一个新的高度和宽度。

代码块 1 - 我现在正在使用

    function insertImageToDoc(base64, selectedContents) {
        Word.run(function (context) {
            var paragraphs = context.document.body.paragraphs;
            context.load(paragraphs);
            return context.sync().then(function () {
                var paragraph = paragraphs.items[0];
                var image = paragraph.insertInlinePictureFromBase64(base64, "start");
                image.width = selectedContents.ImageWidth;
                image.height = selectedContents.Imageheight;
                return context.sync()
            });
        })
.catch(function (error) {
    feedBackMessage("Image could not be inserted, please reload and try again");
});
    } 

代码块 1

此代码运行良好,但是在插入 b64 的情况下,我必须做的唯一选择是在 "start" 或 "end" 处插入。这就是用户当前在处理超过 1 页的文档时遇到给定问题的原因。

代码块 2

function insertImageToDoc(base64, selectedContents) {
    Word.run(function (context) {
        var range = context.document.getSelection();
        context.load(range)
        return context.sync().then(function () {
            var image = range.insertInlinePictureFromBase64(base64, Word.InsertLocation.replace);
            context.load(image);
            return context.sync().then(function () {           
                image.width = selectedContents.ImageWidth;
                image.height = selectedContents.Imageheight;
                return context.sync()
            })              
        });
    })
.catch(function (error) {
    feedBackMessage("Image could not be inserted, please reload and try again");
});
}

代码块 2

这个块能够在任何给定位置插入图像,但是我失去了为我插入的图像实际设置大小的能力。当我应用高度和宽度时它出错了。

代码块 2 错误

总结

我需要能够在任何指定位置插入图像,并且能够调整图像的高度和宽度。

selectedContents 的类型是什么?下面的代码在 Word 在线:

中很适合我
   function replaceImage() {

    var selectedContents = {};
    selectedContents.ImageWidth=20;
    selectedContents.Imageheight=80;

    var base64="iVBORw0KGgoAAAANSUhEUgAAALUAAACmCAIAAAATc1nLAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKwSURBVHhe7dLBaUMBEEPB1JJ60mwq/L7oal0MgjUzqALxfh54Tx80+qDRB40+aPRBow8afdDog0YfNPqg0QeNPmj0QaMPGn3Q6INGHzT6oNEHjT5o9EGjDxp90OiDRh80+qDRB40+aPRBow8afdDog0YfNPqg0QfNR338/v/ZeLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutX9HFsuX5FH8eW61f0cWy5fkUfx5brV/RxbLl+RR/HlutXPuqDr6cPGn3Q6INGHzT6oNEHjT5o9EGjDxp90OiDRh80+qDRB40+aPRBow8afdDog0YfNPqg0QeNPmj0QaMPGn3Q6INGHzT6oNEHjT5o9EGjDxp90OiDRh80+qDRB40+aPRBow8afdDog0YfNPqg0QeNPmj0QaMP3nueF7X1b7GBbsAsAAAAAElFTkSuQmCC";
    insertImageToDoc(base64, selectedContents);
}

function insertImageToDoc(base64, selectedContents) {
    Word.run(function (context) {
        var range = context.document.getSelection();
        context.load(range)
        return context.sync().then(function () {
            var image = range.insertInlinePictureFromBase64(base64, Word.InsertLocation.replace);
            context.load(image);
            return context.sync().then(function () {           
                image.width = selectedContents.ImageWidth;
                image.height = selectedContents.Imageheight;
                return context.sync()
            })              
        });
    })
.catch(function (error) {
    feedBackMessage("Image could not be inserted, please reload and try again");
});
}

测试步骤如下: 1.插入一张网上的图片 2. select图片点击按钮执行replaceImage功能

另外,你开发的客户端是什么?

好的,调试并尝试不同的方法后,我发现了导致错误的问题。 @Fei,关于它与 Office Web 应用程序一起使用是正确的。 郑重声明,问题的产生是因为当上传到 SharePoint 时图像尺寸是以英寸为单位而不是以像素为单位。这导致 office-js 给出错误消息并且没有调整为来自 SharePoint 的尺寸。

例如:

如您所见,来自 SharePoint 的信息告诉我,添加将 H =1050 and W = 2445 尺寸应用于图像。以像素为单位应用这些尺寸会导致错误并阻止图像调整大小。这是有道理的。所以万恶之源在 Office-js api 之外。 这意味着我用作示例的两个代码块都可以正常工作。