Typescript 获取Word文档中的所有图像
我试图在Word文档中获取一组图像。本页面的文档:字面上是示例的剪切粘贴,并没有实际显示如何获取图像-仅显示第一个图像 每个图像我需要以下内容:Typescript 获取Word文档中的所有图像,typescript,ms-word,office-js,word-addins,apps-for-office,Typescript,Ms Word,Office Js,Word Addins,Apps For Office,我试图在Word文档中获取一组图像。本页面的文档:字面上是示例的剪切粘贴,并没有实际显示如何获取图像-仅显示第一个图像 每个图像我需要以下内容: 数据 任何形式都可以。我看到有一个getBase64ImageSrc方法- 这就行了 文件名 没有文件名是好的-我可以看到API没有它-我可以用alt文本或image_{n}构建它,其中{n}是图像索引,但我看不到获得扩展名的方法-这在数据中是作为data:image/jpeg;布拉布拉赫???我不认识医生 没有这种级别的信息 到目前为止,我有以下
- 数据
任何形式都可以。我看到有一个
方法- 这就行了getBase64ImageSrc
- 文件名
没有文件名是好的-我可以看到API没有它-我可以用alt文本或
构建它,其中{n}是图像索引,但我看不到获得扩展名的方法-这在数据中是作为image_{n}
???我不认识医生 没有这种级别的信息data:image/jpeg;布拉布拉赫
Word.run(
async (context) =>
{
// Create a proxy object for the pictures.
const allPictures = context.document.body.inlinePictures;
// Queue a command to load the pictures
context.load(allPictures);
// Synchronize the document state by executing the queued commands,
// and return a promise to indicate task completion.
return context.sync().then(() => allPictures);
})
.then((allPictures) =>
{
const images: IFileData[] = [];
let picture: Word.InlinePicture | undefined;
let imageCount = 0;
while (undefined !== (picture = allPictures.items.pop()))
{
const data = picture.getBase64ImageSrc();
const extension = ""; // TODO: no idea how to find this
const filename =
(
Strings.isNullOrEmpty(picture.altTextTitle)
? `image_${imageCount++}`
: Path.toFriendlyUrl(picture.altTextTitle)
)
images.push({
filename: filename + extension,
data: data
});
}
resolve(images);
})
.catch((e) => reject(e));
我在这里使用一些自定义帮助程序,它们执行以下操作:
- 字符串。isNullOrEmpty
如果字符串为null或空,则返回true,否则返回false - Path.toFriendlyUrl
返回字符串,其中包含转换为
的空格以及一些其他改进-
我目前的方法正确吗?“正确”才是有效的。。。我可以解决一个特定的问题:获取图像类型——您称之为“文件名”。因为这有点长,答案是:你可以,但你必须为此努力一点 Word并不总是为文档中的图像存储文件名,除非该图像链接到外部源。但是,它所存储的是图像本身以及在Word Open XML文档中管理图像所需的信息。存储的信息的一部分是图形图像类型,作为文档和图像二进制代码之间的内部关系的一部分 对象模型(无论是JS还是COM)不提供对该信息的任何直接访问。但是,它可以从文档的Word Open XML中读取。此代码可以获取OPC平面文件格式的InlineShape的特定Word Open XML字符串:
const range = context.document.body.inlinePictures.getFirst();
var sXML = range.getRange("Whole").getOoxml();
range.load("Ooxml");
await context.sync();
console.log(sXML.value);
在Open xml的document.xml部分中,引用了一个InlineShape(部分),如下所示-请参阅最后一个属性为r:embed=“rId6”
的元素
如您所见,文件类型在此处可用。如果您使用标准的XML工具来解析XML字符串,您可以获得如下信息
使用标准XML技术的另一种方法是使用标准的Microsoft Open XML SDK(C#或VB.NET)或OpenXMLSDK for JavaScript()分析OpenXML一词。在这种情况下,您无法直接读取“rels”。相反,“工具”查找相应的“包”(在本例中为“media/image1.png”)并返回该信息。如您所见,这包括属性pkg:contentType,它为您提供了文件扩展名
<pkg:part pkg:name="/word/media/image1.png" pkg:contentType="image/png" pkg:compression="store">
“正确”才有效。。。我可以解决一个特定的问题:获取图像类型——您称之为“文件名”。因为这有点长,答案是:你可以,但你必须为此努力一点
Word并不总是为文档中的图像存储文件名,除非该图像链接到外部源。但是,它所存储的是图像本身以及在Word Open XML文档中管理图像所需的信息。存储的信息的一部分是图形图像类型,作为文档和图像二进制代码之间的内部关系的一部分
对象模型(无论是JS还是COM)不提供对该信息的任何直接访问。但是,它可以从文档的Word Open XML中读取。此代码可以获取OPC平面文件格式的InlineShape的特定Word Open XML字符串:
const range = context.document.body.inlinePictures.getFirst();
var sXML = range.getRange("Whole").getOoxml();
range.load("Ooxml");
await context.sync();
console.log(sXML.value);
在Open xml的document.xml部分中,引用了一个InlineShape(部分),如下所示-请参阅最后一个属性为r:embed=“rId6”
的元素
如您所见,文件类型在此处可用。如果您使用标准的XML工具来解析XML字符串,您可以获得如下信息
使用标准XML技术的另一种方法是使用标准的Microsoft Open XML SDK(C#或VB.NET)或OpenXMLSDK for JavaScript()分析OpenXML一词。在这种情况下,您无法直接读取“rels”。相反,“工具”查找相应的“包”(在本例中为“media/image1.png”)并返回该信息。如您所见,这包括属性pkg:contentType,它为您提供了文件扩展名
<pkg:part pkg:name="/word/media/image1.png" pkg:contentType="image/png" pkg:compression="store">
请查看正在做您需要的事情的t。我认为你的思路是对的
以下是一些示例代码:
异步函数运行(){
等待Word.run(异步(上下文)=>{
让myImages=context.document.body.inlinePictures;
加载(“imageFormat”);
wait context.sync();
如果(myImages.items.length>0)
console.log(myImages.items[0].imageFormat);
其他的
log(“找不到图像”)
});
}
请查看正在做您需要的事情的t。我认为你的思路是对的
以下是一些示例代码:
异步函数运行(){
等待Word.run(异步(上下文)=>{
让myImages=context.document.body.inlinePictures;
加载(“imageFormat”);
wait context.sync();
如果(myImages.items.length>0)
console.log(myImages.items[0].imageFormat);
其他的
log(“找不到图像”)
});
}
谢谢您的回复,辛迪。从您的回复来看,我认为我最好只发送文档服务器端,并使用我已经用于其他内容的文档解析技术。我只是希望有一种方法可以完全使用office.js在客户端完成这项工作。我会把这个打开几天,看看是否有其他人有一些