当前位置: 首页 > news >正文

java解析word文档

文章目录

  • 读取段落
  • 读取图片
  • 读取表格内容
  • 页码

读取段落

  读取段落内容非常简单。以下是一个demo:

public static void main(String[] args) {try(FileInputStream stream = new FileInputStream("parse/pages.docx")) {XWPFDocument document = new XWPFDocument(stream);List<XWPFParagraph> paragraphs = document.getParagraphs();for (XWPFParagraph paragraph: paragraphs) {System.out.println(paragraph.getText());}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}
}

  

读取图片

  读取word里的图片也不难了,只需要获取XWPFPictureData对象就可以了,然后就可以获取到图片内容的byte数组。


public static void main(String[] args) {try(FileInputStream stream = new FileInputStream("parse/pages.docx")) {XWPFDocument document = new XWPFDocument(stream);List<XWPFPictureData> allPictures = document.getAllPictures();for (XWPFPictureData pictureData: allPictures) {byte[] data = pictureData.getData();File file = new File(pictureData.getFileName());Files.write(file.toPath(), data);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}
}

读取表格内容

  word中的表格,是XWPFTable-XWPFTableRow-XWPFTableCell的三级结构。有个这个三级结构,就非常好写代码获取了。

public static void main(String[] args) {try(FileInputStream stream = new FileInputStream("parse/table.docx")) {XWPFDocument document = new XWPFDocument(stream);List<XWPFTable> tables = document.getTables();for (XWPFTable table: tables) {List<XWPFTableRow> rows = table.getRows();for (XWPFTableRow row: rows) {List<XWPFTableCell> tableCells = row.getTableCells();for (XWPFTableCell cell: tableCells) {System.out.print(cell.getText());System.out.print("\t");}System.out.println();}}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}
}

页码

  实际工作中,解析word的场景少,生成word的场景多。但是如果有个需求是获取word特定一页的内容呢?比如说获取第9页内容,怎么办?可以说非常难实现,因为apache poi只能读取word底层的xml模型,实际的页码需要渲染才知道。

http://www.xdnf.cn/news/1134631.html

相关文章:

  • Linux 716 数据库迁移
  • x86版Ubuntu的容器中运行ARM版Ubuntu
  • 零基础学Vue3组件化开发
  • 统计功效是什么?
  • VR 污水厂初体验:颠覆传统认知​
  • 广州 VR 森林防火系统功能探究​
  • AI应用核心转向Context Engineering
  • 在UE中如何操作视图的大小,方位,移动
  • FPGA基础 -- Verilog 访问寄存器数组的指定位示例
  • 详解SPFA算法-单源最短路径求解
  • AI Agent开发学习系列 - langchain之LCEL(2):LCEL 链式表达解析
  • 高性能上位机界面设计范式:C#与C++/C开发调试无缝衔接
  • 《图解技术体系》Four Implementation Methods of Distributed Transactions
  • 《设计模式之禅》笔记摘录 - 7.中介者模式
  • FATFS文件系统原理及其移植详解
  • 042_封装的实现(属性私有化 / 方法公开)
  • Gradle vs Maven:构建工具世纪对决 —— 像乐高积木与标准模型之间的选择艺术
  • LeetCode经典题解:141、判断链表是否有环
  • LLM指纹底层技术——模型架构
  • mysql 慢sql优化篇
  • OSPF作业
  • 开源 python 应用 开发(六)网络爬虫
  • 从零开发足球比分APP:REST API与WebSocket的完美搭配
  • 数据结构--准备知识
  • Git问题排查与故障解决详解
  • 汽车数字化——65页大型汽车集团企业IT信息化(管理架构、应用架构、技术架构)战略规划【附全文阅读】
  • 【代码】Matlab鸟瞰图函数
  • kimi-k2-api使用示例
  • 技术分享:如何用规则定义生成自定义文件时间戳
  • 面向向量检索的教育QA建模:九段日本文化研究所日本语学院的Prompt策略分析(6 / 500)