java操作word/excel/pdf等文件技术方案
最近项目中遇到很多对word/excel/pdf等文件的操作,解决方案有好多,开源免费有:利用openoffice组件(需要安装openoffice软件),poi,itext等。也有收费的服务:aspose(特别好用,也有点贵)。
我项目中需求可以概括为导出word(包括文字,表格,图片),把pdf插入到word,word之间的合并。
这里按需求介绍一下我走通的技术方案:
导出word 可以使用poi,aspose。(其实poi操作word还是有些不方便的,用itext好一些,当然aspose都可以干,只不过要花钱!!)
关于这方面的资料挺少的,api都挺好使用的,只不过一开始面对忙忙多的类,会有无从下手的感觉,特再此说明一些关键操作类。
无论采用哪种类库,他们大致步奏是一样的。一般都是新建一个段落,获取画笔。(由于本文主要提供技术方案及操作步奏,具体代码就不提供了,读者可以根据作者思路及官方api进行操作)
poi操作word:poi操作word把doc/docx是分开的,创建word对象后,便可create paragraph(段落)了,在从paragraph.createRun(),获取画笔XWPFRun(我称为画笔),便可run设置文字字体,大小,通过setText()方法,变可以写入文字。
生成表格,paragraph.createTable(),可以在create时声称table的大小,也可以动态添加行和列。
插入图片:poi插入图片有点问题,下面重写了XWPFDocuemnt的插入图片方法,读者可以使用自己类代替自带的XWPFDocument进行docx的操作
public class CustomXWPFDocument extends XWPFDocument { public CustomXWPFDocument(InputStream in) throws IOException { super(in); } /** * */ public CustomXWPFDocument() { super(); // TODO Auto-generated constructor stub} /** *@param pkg *@throws IOException */ public CustomXWPFDocument(OPCPackage pkg) throws IOException { super(pkg); // TODO Auto-generated constructor stub} // picAttch 图片后面追加的字符串 可以是空格public void createPicture(XWPFParagraph paragraph,int id, int width, int height,String picAttch) { final int EMU = 9525; width *= EMU; height *= EMU; String blipId = getAllPictures().get(id).getPackageRelationship() .getId(); CTInline inline = paragraph.createRun().getCTR() .addNewDrawing().addNewInline(); paragraph.createRun().setText(picAttch); String picXml = "" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + id + "\" name=\"Generated\"/>" + " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>" + " <a:blip r:embed=\"" + blipId + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" + " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>" + " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>" + " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\"" + height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">" + " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>" + " </pic:pic>" + " </a:graphicData>" + "</a:graphic>"; // CTGraphicalObjectData graphicData =inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null; try { xmlToken = XmlToken.Factory.parse(picXml); } catch (XmlException xe) { xe.printStackTrace(); } inline.set(xmlToken); // graphicData.set(xmlToken);inline.setDistT(0); inline.setDistB(0); inline.setDistL(0); inline.setDistR(0); CTPositiveSize2D extent = inline.addNewExtent(); extent.setCx(width); extent.setCy(height); CTNonVisualDrawingProps docPr = inline.addNewDocPr(); docPr.setId(id); docPr.setName("图片" + id); docPr.setDescr(""); }
}
使用createPicture方法便可以插入图片了。
存储word:XWPFDocument有write方法,我们可以提供了FileOutputStream,便可直接保存了。
aspose操作word:aspose真心好用,毕竟收费还这么贵,首先通过Document实例化一个word对象(doc/docx)都可以,然后获取DocumentBuilder(我称之为画笔),接下来所有的操作,包括画表格都有它来完成,跟poi的使用还有点不一样的,写入文字,表格,图片都是基于builder完成的,write是写入文字的做法。
这里跟poi有一个很大的不同,假设我们需要有个文字加黑操作,poi在加黑和不加黑就需要两个run来处理,而aspose只需要用同一个builder来处理就好,builder.setBlod(),完全不影响该builder画出的全部数据。
下面在来讲讲pdf插入word,合并word的操作。
很遗憾,poi/aspose.word是不支持直接插入pdf的,我这里采用了pdfbox库先将pdf转为图片,然后将图片插入到word中。
word合并:aspose是直接支持合并word的,Document.append()方法直接合并。
java操作word/excel/pdf等文件技术方案相关推荐
- txt doc rtf html,JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例.docx
JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例 JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例??2012-06-2 ...
- java全文检索word中的内容_搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结...
搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结 (2012-02-12 16:31:59) 标签: pdf文档 幻灯片 pdf文件 全文检索 控件 it JAVA读取 ...
- [JAVA使用技巧]Java抽取Word和PDF格式文件_网络大本营
Java抽取Word和PDF格式文件的四种武器(1) 很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel,pdf等文档的内容?我研究了一下,在这里总结一下抽取word, ...
- Java处理Word, Excel, PDF文档的4种开源系统的代码例子
原文: http://blog.csdn.net/wzwfly/article/details/1645046 很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel, ...
- java提出word和pdf等文件的信息
由于项目在做网站内容搜索的时候,信息存储给是有office中的word,和pdf文件.还好基于lucence的处理,预留了良好的扩展接口.加入如下的工具支持,可以实现无逢的多信息格式的搜索引擎了.下面 ...
- Java操作Word转PDF(Word转图片)
1. spire.doc的jar引用 首先我们需要用到国产word处理工具jar包spire.doc,可以通过maven仓库寻找,然后在pom文件中直接引用. 此处需要注意,我们需要使用的是spire ...
- java poi- 实现 word Excel pdf ppt 转 HTML
所需要 jar poi-3.17.jar poi-examples-3.17.jar poi-excelant-3.17.jar poi-ooxml-3.17.jar poi-ooxml-schema ...
- Java操作word文件的工具选择
Java操作word文件的工具选择 使用Java语言,创建doc.docx.excel.pdf等文档,并对文档进行一系列操作. Spire.Doc for Java https://blog.csdn ...
- java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...
Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...
最新文章
- 乾坤合一~Linux设备驱动之终端设备驱动
- instanceof与typeof 运算符
- 微信公众号扫描带参数二维码实现自动分组?
- 提升系统 10 倍性能的 10 个建议!
- 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | native 函数查询 | dalvik_system_DexFile.cpp#defineClassNative 函数 )
- Hibernate 集合映射
- ORACLE TEXT DATASTORE PREFERENCE(六)
- SAP Spartacus 找不到登录入口的问题 - 如何使用 Schematics 安装 user package
- 如何启用SAP Cloud Platform的mobile服务
- keil5函数 默认返回值_C++ 函数的定义
- C语言程序设计基础讲座之指针的慨念
- ZooKeeper(二) idea中使用Java操作zookeeper
- live555 分析—— OpenRtsp
- NYOJ201-作业题(最长升降子序列)
- 计算机必懂的54个英文单词和缩写
- java环境_Java 开发环境配置
- java coherence_coherence配置说明
- docker搭建wekan及注册备份维护
- 面试拆解:系统上线后Cpu使用率飙升如何排查?
- 《Dreamweaver CS6 完全自学教程》笔记 第四章:创建站点
热门文章
- jSignature开发实例
- STM32四行【跳转程序】引申出来的几条重要知识点
- Hive SQL之FULL JOIN优化
- SpringBoot的Web开发入门案例2—国际化
- 感知器Perceptron
- linux x64 参数传递,linux x64 gdb 调试学习笔记
- C# StreamReader类:读取文件
- JS四舍五入、向上/下取整
- 魔百盒CM311-3_YS_晨星MSO9385芯片_安卓9.0_当贝桌面_卡刷固件包
- parentNode,parentElement,childNodes,children最经典讲解