Ruby:从 docx 文件中解析/提取图像和对象
Posted
技术标签:
【中文标题】Ruby:从 docx 文件中解析/提取图像和对象【英文标题】:Ruby: parse/extract images and objects from docx file 【发布时间】:2017-09-18 15:14:51 【问题描述】:我正在尝试使用 Ruby 打开和读取 .docx 文件,并提取部分文本和对象/图像并保存到另一个(非 .docx)文件中。
使用 Nokogiri,我能够正确提取文本并将文档划分为我想要的部分:
zip = Zip::File.open file_path
doc = zip.find_entry("word/document.xml")
xml = Nokogiri::XML.parse(doc.get_input_stream)
wt = xml.root.xpath("//w:t", "w" =>
"http://schemas.openxmlformats.org/wordprocessingml/2006/main")
如果我这样做:
xml.root.xpath("//w:body", "w" => "http://schemas.openxmlformats.org/wordprocessingml/2006/main")
我可以看到 xml 中的对象为:
<w:object w:dxaOrig="1440" w:dyaOrig="400">
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype>
<v:shape id="_x0000_i1025" type="#_x0000_t75" style="width:1in;height:20.4pt" o:ole="">
<v:imagedata r:id="rId4" o:title=""/>
</v:shape>
<o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1563800156" r:id="rId5"/>
</w:object>
但不确定如何将其转换为以后可用于在 html 中显示的内容。转换为 svg 以便它可以与 html 中的文本一起显示将是理想的。
感谢您的帮助。
【问题讨论】:
【参考方案1】:看起来这可能是 VML,将其与 MSDN 上 Using the Formulas Element 的示例进行比较:
<v:shape style='width:1in;height:1in;' strokecolor="red" strokeweight="2pt" coordsize="21600,21600" adj="17520" path="m10800,0qx0,10800,10800,21600,21600,10800,10800,0xe m7340,6445qx6215,7570,7340,8695,8465,7570,7340,6445xnfe m14260,6445qx13135,7570,14260,8695,15385,7570,14260,6445xnfe m4960@0c8853@3,12747@3,16640@0nfe"> <v:formulas> <v:f eqn="sum 33030 0 #0"/> <v:f eqn="prod #0 4 3"/> <v:f eqn="prod @0 1 3"/> <v:f eqn="sum @1 0 @2"/> </v:formulas> </v:shape>
该页面上有一个指向VML specification 的链接,可以查看所有内容,但对于预先编写的工具,我找不到太多,尽管有几个关于它的问题,其中大多数是看起来他们被标记为重复,或者以其他方式都引用了这个问题Are there any tools to convert legacy VML to SVG?
【讨论】:
以上是关于Ruby:从 docx 文件中解析/提取图像和对象的主要内容,如果未能解决你的问题,请参考以下文章
python 解析docx文档的方法,以及提取插入的文本对象和图片
如何从 .doc 和 .docx 文件中提取纯文本? [关闭]
<未完成;python使用oletools提取docx文件中的嵌入文件(指word中的插入对象)
Python中的HTMLParsercookielib抓取和解析网页从HTML文档中提取链接图像文本Cookies