【问题标题】:Inserting svg in office-js在 office-js 中插入 svg
【发布时间】:2016-09-19 11:22:12
【问题描述】:

背景

我正在开发一个 Office 插件,使用 Word Javascript API 在文档中插入一些图表。

我目前的做法如下:
在任务窗格中生成 SVG 图像=> 使用 canvg 在画布上绘制图像 => 以 png 格式获取画布图像 => 插入 Word 文档中

这很好用,除了一件事 - png 图像本身是模糊的,并且由于转换存在相当多的质量损失。

问题
是否可以将 Body.insertInlinePictureFromBase64 与矢量图形图像一起使用?

一些注意事项:

  • 尝试将图像作为纯 XML 插入 - 无效
  • 尝试将 svg 字符串编码为 base64 并通过 插入的 insertInlinePicture 方法 - 无法正常工作,只显示损坏的图像 (可能是因为它需要一个实际的位图图像而不是 矢量图像)

【问题讨论】:

  • Todor 你来过 Build 2017 吗?
  • 可悲的是,没有——虽然我确实遇到过 ScriptLabs 演示,但看起来还不错。我也一直在关注 office-js github repo 以获取我需要的功能

标签: office-js officedev


【解决方案1】:

托多 - 好问题。问题是 Office 不支持矢量文件格式。实际上,如果您尝试直接从 Word 中的插入->图片功能插入 *.svg 图像,您将看到图像不会按预期插入。例如,Word Online 也是如此。

我建议您尝试 jpg、jpeg、png、gif、bmp、tif 或 tiff 格式。

谢谢! 胡安。

【讨论】:

  • Office 现在支持 SVG:support.office.com/en-us/article/…
  • 是的,我们的待办事项是在 API 中添加对它的支持。还没有具体的日期。感谢您的跟进。
  • 插入 SVG 文件,或编写自定义 SVG 代码的能力?我肯定希望能够插入由 JS 呈现的自定义 SVG 或类似的东西。想象一下使用<text> 标签制作自定义图标/图表的能力,您可以从 Excel 更新 Cells
  • 这个想法是您可以合成 SVG,然后将其插入或替换文档中的现有对象。
  • @JuanBalmori 从那以后有什么进展吗?我想使用 C++ COM API 将 SVG 插入 Word 文档。我找不到像下面提到的setSelectedDataAsync 这样的函数,InsertFile() 和 InsertXML() 也没有帮助。
【解决方案2】:

这是一个如何将 SVG 内容插入到 word 文档中的示例:

https://gist.github.com/barisbikmaz/73526f81e1425845fc199506ff871429

相关代码sn-p:

const svgImage = '<svg><rect x="0" y="0" height="50" width="50" style="stroke:#ff0000; fill:#0000ff" /></svg>';

Office.context.document.setSelectedDataAsync(svgImage, { coercionType: Office.CoercionType.XmlSvg, imageLeft: 220, imageTop: 220, imageWidth: 100 }, function(result) {
     console.log(result);
});

注意:

imageLeft 和 imageTop 被 Word 忽略,见https://docs.microsoft.com/en-us/javascript/api/office/office.document?view=office-js

最好的问候, 拉希德

【讨论】:

  • 用常规的 COM API 代替 JS 插件 API 是否可以做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多