请问一个文档中包含了另一个附件文档,怎么获取它?
@ouchli 嵌入的 OLE 对象在 Aspose.Words 文档对象模型中表示为形状。 您可以使用 Shape.OleFormat 属性访问它们的属性。 请参阅我们的文档以了解如何使用 Aspose.Words 处理 OLE 对象:
https://docs.aspose.com/words/java/working-with-ole-objects/
Document doc = new Document("D:\\Users\\00306664\\Desktop\\开发工作\\aspose\\temp\\里面有附件.docx");
for (Shape s : (Iterable<Shape>)doc.getChildNodes(NodeType.SHAPE, true))
{
OleFormat oleFormat = s.getOleFormat();
if (Objects.nonNull(oleFormat))
{
byte[] rawData = oleFormat.getRawData();
Document doc2 = new Document(new ByteArrayInputStream(rawData));
NodeCollection<Paragraph> childNodes = doc2.getChildNodes(NodeType.PARAGRAPH, true);
Node node = childNodes.get(0);
String text = node.getText();
System.out.println("成功");
}
}
使用上面的代码获取的附件文档信息不对,请问代码有什么问题?
里面有附件.docx (45.1 KB)
你好这是我的输入文档
for (Shape s : (Iterable<Shape>)doc.getChildNodes(NodeType.SHAPE, true))
{
OleFormat oleFormat = s.getOleFormat();
if (Objects.nonNull(oleFormat))
{
byte[] rawData = oleFormat.getRawData();
Document doc2 = new Document(new ByteArrayInputStream(rawData));
NodeCollection<Paragraph> childNodes = doc2.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph childNode : childNodes)
{
System.out.println(childNode.getText());
}
}
}
这段代码打印的结果是乱码
@ouchli 如果您需要提取 OLE 对象,您应该使用OleFormat.save
方法而不是OleFormat.getRawData
。 请像这样修改您的代码:
ByteArrayOutputStream tmpStream = new ByteArrayOutputStream();
oleFormat.save(tmpStream);
Document doc2 = new Document(new ByteArrayInputStream(tmpStream.toByteArray()));
谢谢,那我想要获取 文档里面的附件名称,怎么获取呢
@ouchli OLE 对象可以提供建议的文件名和扩展名,我们可以在将对象的内容保存到本地文件系统中的文件中时使用它们。 如果建议的文件名可用于 OLE 对象,您可以使用oleFormat.getSuggestedFileName()获取。 在您的特定情况下,没有建议的文件名,因此您应该使用建议的扩展名和一些随机文件名自行构建它。您可以使用 OleFormat.getSuggestedExtension() 属性获取建议的扩展。
文档中的 附件名 是 “表格1.docx” ,这个值获取不到吗
那我是不是也判断不出来这个附件是excel、pdf还是docx?
请问可以支持提取图标上的文字吗?
请问在word中怎么构造文件名
这其中都没有可选项
请问这个excel附件,Excel.Sheet.12 这个节点怎么获取