我们正在尝试实现 Word 使用 Office-JS 所做的内置功能,但想知道这是否可能。
我们有两个绘图画布,一个较大,包含多个图像和形状。另一个更小,而且是空的。
在Word中,我们可以到大画布上,按CTRL+A全选画布内的内容,然后到另一个小画布上粘贴,一切都会自动调整大小。
我们正在尝试使这个过程自动化,但它并没有给我们相同的结果。使用 Office-JS API,我们得到画布的 OOXML,然后我们使用 context.document.body.insertOoxml 将该 OOXML 插入到新画布中,内容被插入但它不会自动调整大小以适应较小的画布画布
还有其他方法可以做到吗?
这是我们尝试过的,遍历画布中的每个元素并将其调整为新的大小,但它似乎并没有反映出这些变化:
// Get all paragraphs
let xmlContent;
xmlContent = doc.body.getOoxml();
await context.sync();
const parser = new DOMParser();
let xml: Document = parser.parseFromString(xmlContent.value, 'application/xhtml+xml');
const paragraphs = xml.getElementsByTagName('w:p');
for (let i = 0; i <= paragraphs.length - 1; i++) {
if (paragraphs[i].getElementsByTagName('w:sdtPr').length > 0
&& paragraphs[i].getElementsByTagName('w:sdtPr')[0].getElementsByTagName('w:id')[0].getAttributeNode("w:val").value === '1234306') {
targetCanvasParagraph = paragraphs[i + 1];
}
let drawings = targetCanvasParagraph.getElementsByTagName('w:drawing');
let factor = 1.724156661532341;
for (let i = 0; i < drawings.length; i++) {
let positionH = drawings.item(i).getElementsByTagName('wp:positionH')[0];
if (positionH) {
let posOffsetH = positionH.getElementsByTagName('wp:posOffset')[0];
posOffsetH.textContent = (Math.trunc(Number(posOffsetH.textContent) / factor)).toString();
}
let positionV = drawings.item(i).getElementsByTagName('wp:positionV')[0];
if(positionV){
let posOffsetV = positionV.getElementsByTagName('wp:posOffset')[0];
posOffsetV.textContent = (Math.trunc(Number(posOffsetV.textContent) / factor)).toString();
}
}