最近项目中遇到很多对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等文件技术方案相关推荐

  1. 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 ...

  2. java全文检索word中的内容_搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结...

    搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结 (2012-02-12 16:31:59) 标签: pdf文档 幻灯片 pdf文件 全文检索 控件 it JAVA读取 ...

  3. [JAVA使用技巧]Java抽取Word和PDF格式文件_网络大本营

    Java抽取Word和PDF格式文件的四种武器(1) 很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel,pdf等文档的内容?我研究了一下,在这里总结一下抽取word, ...

  4. Java处理Word, Excel, PDF文档的4种开源系统的代码例子

    原文: http://blog.csdn.net/wzwfly/article/details/1645046   很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel, ...

  5. java提出word和pdf等文件的信息

    由于项目在做网站内容搜索的时候,信息存储给是有office中的word,和pdf文件.还好基于lucence的处理,预留了良好的扩展接口.加入如下的工具支持,可以实现无逢的多信息格式的搜索引擎了.下面 ...

  6. Java操作Word转PDF(Word转图片)

    1. spire.doc的jar引用 首先我们需要用到国产word处理工具jar包spire.doc,可以通过maven仓库寻找,然后在pom文件中直接引用. 此处需要注意,我们需要使用的是spire ...

  7. 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 ...

  8. Java操作word文件的工具选择

    Java操作word文件的工具选择 使用Java语言,创建doc.docx.excel.pdf等文档,并对文档进行一系列操作. Spire.Doc for Java https://blog.csdn ...

  9. java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...

    Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...

最新文章

  1. 乾坤合一~Linux设备驱动之终端设备驱动
  2. instanceof与typeof 运算符
  3. 微信公众号扫描带参数二维码实现自动分组?
  4. 提升系统 10 倍性能的 10 个建议!
  5. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | native 函数查询 | dalvik_system_DexFile.cpp#defineClassNative 函数 )
  6. Hibernate 集合映射
  7. ORACLE TEXT DATASTORE PREFERENCE(六)
  8. SAP Spartacus 找不到登录入口的问题 - 如何使用 Schematics 安装 user package
  9. 如何启用SAP Cloud Platform的mobile服务
  10. keil5函数 默认返回值_C++ 函数的定义
  11. C语言程序设计基础讲座之指针的慨念
  12. ZooKeeper(二) idea中使用Java操作zookeeper
  13. live555 分析—— OpenRtsp
  14. NYOJ201-作业题(最长升降子序列)
  15. 计算机必懂的54个英文单词和缩写
  16. java环境_Java 开发环境配置
  17. java coherence_coherence配置说明
  18. docker搭建wekan及注册备份维护
  19. 面试拆解:系统上线后Cpu使用率飙升如何排查?
  20. 《Dreamweaver CS6 完全自学教程》笔记 第四章:创建站点

热门文章

  1. jSignature开发实例
  2. STM32四行【跳转程序】引申出来的几条重要知识点
  3. Hive SQL之FULL JOIN优化
  4. SpringBoot的Web开发入门案例2—国际化
  5. 感知器Perceptron
  6. linux x64 参数传递,linux x64 gdb 调试学习笔记
  7. C# StreamReader类:读取文件
  8. JS四舍五入、向上/下取整
  9. 魔百盒CM311-3_YS_晨星MSO9385芯片_安卓9.0_当贝桌面_卡刷固件包
  10. parentNode,parentElement,childNodes,children最经典讲解