def get_paragraph_str(paragraph):
"""获取段落信息"""
para_content = paragraph.to_string(aw.SaveFormat.TEXT)
para_content = para_content.replace("\r", "")
para_content = para_content.strip()
return para_content
def get_all_text(
self,
):
"""获取文档中的所有文字,包括段落和表格"""
all_text = []
list_index = 0
for s in self.doc.sections:
sect = s.as_section()
for node in sect.body.get_child_nodes(aw.NodeType.ANY, False):
if node.node_type == aw.NodeType.PARAGRAPH:
node = node.as_paragraph()
para_content = node.get_text().strip()
if node.is_list_item:
# 处理列表项
list_index += 1
all_text.append(f"{list_index}. {para_content}")
else:
list_index = 0
if para_content:
all_text.append(para_content)
if node.node_type == aw.NodeType.TABLE:
parent_node = node.as_table()
table_content = self.get_table_str(parent_node)
all_text.append(table_content)
if node.node_type == aw.NodeType.SHAPE:
return "\n".join(all_text)
在 Aspose Words Python API 中,当遇到 NodeType.SHAPE 节点时,可以通过检查节点的 ShapeType 属性来判断是否为图片,并通过 ImageData 或 OleObject 属性访问图片信息 。
如果 SHAPE 节点表示一个图片(例如 ShapeType.IMAGE),可以使用 node.as_shape().image_data 获取图片数据;如果是嵌入对象(如 OleObject),则可使用 node.as_shape().ole_object 获取相关信息 。
你可以修改你的代码,在处理 NodeType.SHAPE 的部分添加如下逻辑:
if node.node_type == aw.NodeType.SHAPE:
shape = node.as_shape()
if shape.shape_type == aw.drawing.ShapeType.IMAGE:
# 获取图片信息
image_data = shape.image_data
# 可以进一步处理 image_data,比如获取图片格式、大小等
print("Found an image.")
elif shape.shape_type == aw.drawing.ShapeType.OLE_OBJECT:
# 获取嵌入对象信息
ole_object = shape.ole_object
print("Found an OLE object.")
这将帮助你识别并提取文档中形状节点内的图片或嵌入对象的信息。
def get_all_text(
self,
):
"""获取文档中的所有文字,包括段落和表格"""
all_text = []
list_index = 0
for s in self.doc.sections:
sect = s.as_section()
for node in sect.body.get_child_nodes(aw.NodeType.ANY, False):
if node.node_type == aw.NodeType.PARAGRAPH:
node = node.as_paragraph()
para_content = node.get_text().strip()
if node.is_list_item:
# 处理列表项
list_index += 1
all_text.append(f"{list_index}. {para_content}")
else:
list_index = 0
if para_content:
all_text.append(para_content)
if node.node_type == aw.NodeType.TABLE:
parent_node = node.as_table()
table_content = self.get_table_str(parent_node)
all_text.append(table_content)
if node.node_type == aw.NodeType.SHAPE:
print(111111)
shape = node.as_shape()
if shape.shape_type == aw.drawing.ShapeType.IMAGE:
image_data = shape.image_data
# 可以进一步处理 image_data,比如获取图片格式、大小等
print("Found an image.")
print(image_data)
# 获取图片信息
elif shape.shape_type == aw.drawing.ShapeType.OLE_OBJECT:
# 获取嵌入对象信息
ole_object = shape.ole_object
print("Found an OLE object.")
print(ole_object)
return "\n".join(all_text)
这样写获取不到图片信息
在 Aspose Words Python API 中,要正确提取 Shape 节点中的图片信息,需先确认节点类型为 NodeType.SHAPE,并通过 as_shape() 方法将其转换为 Shape 对象,再根据其 shape_type 判断是否为 IMAGE 类型 。
如果 Shape 节点是图片类型(即 shape_type == aw.drawing.ShapeType.IMAGE),可通过 shape.image_data 获取图片数据 。但请注意,image_data 本身可能不直接包含图片的格式或尺寸信息,需要进一步解析才能获取这些属性 。
若 Shape 节点是嵌入对象(shape_type == aw.drawing.ShapeType.OLE_OBJECT),则应使用 shape.ole_object 来获取嵌入对象的相关信息 。
你当前的代码结构基本正确,但“获取不到图片信息”的问题可能是由于以下原因导致:
- 图片未被正确识别为
ShapeType.IMAGE; - 图片数据在文档中是以其他形式存储(如链接而非内联);
image_data返回的是原始字节流,需额外处理以提取图片格式或尺寸。
建议尝试打印 shape.shape_type 和 shape.image_data 的值,以验证是否成功捕获到图像节点及其数据 。如果仍无法获取信息,请提供一个最小可复现示例以便进一步排查。
@Tiaohh 如果要将整个形状渲染成图像,可以使用 ShapeRenderer:
import aspose.words as aw
doc = aw.Document("C:\\Temp\\in.docx")
i = 0
for s in doc.get_child_nodes(aw.NodeType.SHAPE, True):
s = s.as_shape()
s.get_shape_renderer().save(f"C:\\Temp\\shape_{i}.png", aw.saving.ImageSaveOptions(aw.SaveFormat.PNG))
i += 1
如果您只想提取图像,可以使用以下代码:
import aspose.words as aw
doc = aw.Document("C:\\Temp\\in.docx")
i = 0
for s in doc.get_child_nodes(aw.NodeType.SHAPE, True):
s = s.as_shape()
if s.has_image:
s.image_data.save(f"C:\\Temp\\image_{i}{aw.FileFormatUtil.image_type_to_extension(s.image_data.image_type)}")
i += 1