在平常办公自动化开展过程里, 常常得从Word文档当中提取图片, 还要清晰知晓其确切位置。好多开发者觉得图片不过是单纯镶嵌于段落之中, 实际上Word文档里头的图片常常被安放在一个叫做“锚点”的架构之内, 关键参数便是图片相对于页面或者段落的坐标。接下来我就从编程实战的层面, 说一说怎样用Java获取这些坐标信息。使用Apache POI获取图片的锚点坐标处于当前状况下最为主要流行的Java用于操作Office文档的工具包是Apache POI。针对呈现docx格式的Word文档而言, 图片并非是直接被放置于文本流当中的, 而是以XML关系对象的形态被嵌入到文档结构里面的。若我们希望获取相关坐标 , 那就需要先对文档里的XWPFRun对象展开解析工作 , 之后再去遍历其中所嵌入的Drawing对象。关键代码的思路是这样的, 借助XWPFDocument去加载文件, 接着遍历全部的段落和表格, 当获取到XWPFRun之后, 调用getEmbeddedPictures方法能够拿到图片列表, 然而在此处需要留意的是, 坐标信息并非存在于图片自身, 而是在图片所处的XML锚点节点内, 要通过CTAnchor对象来进行读取。CTAnchor之中含有像是distT、distB、distL、distR这样的属性, distT代表着图片到段落上方的距离, distB代表着图片到段落下方的距离, distL代表着图片到段落左边的距离, distR代表着图片到段落右边的距离, 其单位是EMU也就是英制公制单位, 若将其除以914400便能够换算成英寸。有这样一种方法, 它适合去处理那种内嵌式的图片, 所谓内嵌式图片, 指的是图片和文字混排的情形。在许多合同模板当中的图片, 是这种模式。报告模板里的图片, 一样是这种模式。利用Apache POI解析定位型图片坐标与内嵌型图片不同, Word里存在一种更为常用的定位型图片, 它们于页面之上呈浮动状态, 能够被随意拖动。此类图片的坐标信息隐匿于文档的XML关系文件内, 确切地讲, 是在word/document.xml里借助wp:anchor标签予以标记。操作这类图片之际, 并非仅依赖XWPFRun的图片获取途径, 而是得径直剖析底层XML。借由XWPFDocument的getDocument方法去获取底层CTDocument对象, 接着对CTDrawing以及CTAnchor展开遍历。于CTAnchor节点里, 属性simplePos或者positionH、positionV便是图片相对于页面左边距以及上边距的坐标值。于实际项目期间, 我经手处理过一份多达300多页的产品手册, 手册当中到处插满了产品示意图以及流程图。客户提出要求, 要将所有图片提取出来, 并且标注其原始所在位置, 以此方便后续的排版校对工作。当时正是运用这种XML解析方式, 把所有浮动图片的坐标逐个提取出来, 再配合图片文件名一同记录到Excel表格里, 工作效率得到了极大提升, 提升幅度超过了十倍之多。
Java读取Word图片坐标的两种方法
在平常办公自动化开展过程里, 常常得从Word文档当中提取图片, 还要清晰知晓其确切位置。好多开发者觉得图片不过是单纯镶嵌于段落之中, 实际上Word文档里头的图片常常被安放在一个叫做“锚点”的架构之内, 关键参数便是图片相对于页面或者段落的坐标。接下来我就从编程实战的层面, 说一说怎样用Java获取这些坐标信息。使用Apache POI获取图片的锚点坐标处于当前状况下最为主要流行的Java用于操作Office文档的工具包是Apache POI。针对呈现docx格式的Word文档而言, 图片并非是直接被放置于文本流当中的, 而是以XML关系对象的形态被嵌入到文档结构里面的。若我们希望获取相关坐标 , 那就需要先对文档里的XWPFRun对象展开解析工作 , 之后再去遍历其中所嵌入的Drawing对象。关键代码的思路是这样的, 借助XWPFDocument去加载文件, 接着遍历全部的段落和表格, 当获取到XWPFRun之后, 调用getEmbeddedPictures方法能够拿到图片列表, 然而在此处需要留意的是, 坐标信息并非存在于图片自身, 而是在图片所处的XML锚点节点内, 要通过CTAnchor对象来进行读取。CTAnchor之中含有像是distT、distB、distL、distR这样的属性, distT代表着图片到段落上方的距离, distB代表着图片到段落下方的距离, distL代表着图片到段落左边的距离, distR代表着图片到段落右边的距离, 其单位是EMU也就是英制公制单位, 若将其除以914400便能够换算成英寸。有这样一种方法, 它适合去处理那种内嵌式的图片, 所谓内嵌式图片, 指的是图片和文字混排的情形。在许多合同模板当中的图片, 是这种模式。报告模板里的图片, 一样是这种模式。利用Apache POI解析定位型图片坐标与内嵌型图片不同, Word里存在一种更为常用的定位型图片, 它们于页面之上呈浮动状态, 能够被随意拖动。此类图片的坐标信息隐匿于文档的XML关系文件内, 确切地讲, 是在word/document.xml里借助wp:anchor标签予以标记。操作这类图片之际, 并非仅依赖XWPFRun的图片获取途径, 而是得径直剖析底层XML。借由XWPFDocument的getDocument方法去获取底层CTDocument对象, 接着对CTDrawing以及CTAnchor展开遍历。于CTAnchor节点里, 属性simplePos或者positionH、positionV便是图片相对于页面左边距以及上边距的坐标值。于实际项目期间, 我经手处理过一份多达300多页的产品手册, 手册当中到处插满了产品示意图以及流程图。客户提出要求, 要将所有图片提取出来, 并且标注其原始所在位置, 以此方便后续的排版校对工作。当时正是运用这种XML解析方式, 把所有浮动图片的坐标逐个提取出来, 再配合图片文件名一同记录到Excel表格里, 工作效率得到了极大提升, 提升幅度超过了十倍之多。