利用POI操作不同版本号word文档中的图片以及创建word文档

我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了。

先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写入数据和向外导出数据而且保存到数据库中这些类似的操作,因为业务上的须要须要利用POI去读取word中的图片,而且去把图片去保存为一个file文件。查了Apache公司提供的api帮助文档,再网友的一些线索,本人也总结了几中对不同word版本号(.doc或者是.docx结尾)对于文件里所含图片的操作方式。希望能对大家有所帮助。


闲话不多说,请看代码:

首先先是对于是.docx文件结尾的word文档中图片的操作:
package poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;

public class GetPics {
	public static void main(String[] args) {
		String path ="F:\\xx.docx";
        File file = new File(path);
        try {
            FileInputStream fis = new FileInputStream(file);
            XWPFDocument document = new XWPFDocument(fis);
            XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(document);
            String text = xwpfWordExtractor.getText();
            System.out.println(text);
            List<XWPFPictureData> picList = document.getAllPictures();
            for (XWPFPictureData pic : picList) {
                System.out.println(pic.getPictureType() + file.separator + pic.suggestFileExtension()
                        +file.separator+pic.getFileName());
                byte[] bytev = pic.getData();
                FileOutputStream fos = new FileOutputStream("d:\\"+pic.getFileName()); 
                fos.write(bytev);
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
	}
}

指定word文件里的图片:


控制台输出的信息:


指定磁盘位置生成的图片文件:



然后就是对于是.doc结尾的word文档中图片的操作:

不同于高版本号的操作类,这里用的就是专门对于03版本号的word操作类:

package com.zjcx.read;

import java.io.*;
import java.util.*;


import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.PicturesTable;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;

public class ReadImg { 

public static void main(String[] args) throws Exception {	
	new ReadImg().readPicture("F://test//test.doc");
}

	private void readPicture(String path)throws Exception{
		 FileInputStream in=new FileInputStream(new File(path)); 
		 HWPFDocument doc=new HWPFDocument(in); 
		 int length=doc.characterLength();
		 PicturesTable pTable=doc.getPicturesTable();
		// int TitleLength=doc.getSummaryInformation().getTitle().length();

		 //  System.out.println(TitleLength);
		  // System.out.println(length);
		   for (int i=0;i<length;i++){
			   Range range=new Range(i, i+1,doc);
			   
			   CharacterRun cr=range.getCharacterRun(0);
			   if(pTable.hasPicture(cr)){
				   	Picture pic=pTable.extractPicture(cr, false);
					String afileName=pic.suggestFullFileName();
					OutputStream out=new FileOutputStream(new File("F:\\test\\"+UUID.randomUUID()+afileName));
					pic.writeImageContent(out);
		
			  }
		   }

	}

}
下面的生成结果同用高版本号读取word中图片而且生成新图片的那几张效果图。


说完了对于不同版本号的word文档中图片的操作,本人还遇到了创建word的业务。不同于我们利用流去生成一个txt文件,也不同与我们直接new一个File。然后在调用file的createNew这种方法。让我们来看看到底利用POI代码和其它的代码来创建或者说是新建(事实上仅仅是近期程度的模仿生成一个word。可是肯定跟我们手动新建有所差别,详细有什么差别本人还是没有參透,假设有大牛看了例如以下的代码知道的话,希望能指点迷津~)一个word,闲话不多说,请看代码:

首先是第一种,创建.doc结尾的word文件。(在这里本人不在贴生成文件的效果图,大家试试就可以)

package poi;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class GenWord03 {
	public static void main(String[] args) throws IOException {
		String path = "F:/";
		String filename = "/123321.doc";
		 String content="";
		byte[] b = content.getBytes("UTF-8");
		ByteArrayInputStream bais = new ByteArrayInputStream(b);
		POIFSFileSystem poifs = new POIFSFileSystem();
		DirectoryEntry dirEntry = poifs.getRoot();
		dirEntry.createDocument("WordDocument", bais);
		FileOutputStream out = new FileOutputStream(path + filename);
		poifs.writeFilesystem(out);
		out.flush();
		out.close();
		bais.close();
	}
}

再者就是创建.docx结尾的word文件。

package poi;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class GenNewWord {
	 
	public static void main(String[] args) throws IOException {
		String content = "要展示的内容";
		
		String path = "F:/";
		String filename = "/xxx.doc";
		XWPFDocument doc = new XWPFDocument();
		XWPFParagraph para= doc.createParagraph();
		XWPFRun run = para.createRun();
		run.setText(content);
		
		File file = new File(path + filename);
		FileOutputStream out = new FileOutputStream(file);
		doc.write(out);
		out.close();
		
	}

}

注:也许比較熟练POI操作的老手们来说,也许知道Apache公司提供的操作类中对于03版本号的word文档操作是有限的,很多其它仅仅是对于一个现有(已经存在)的文档操作,所以我们在各大网友的博客或者帖子中都会发现对于旧版本号的word文档操作的代码開始处就是读取一个现有word的操作。而对于07版本号(也就是.docx结尾的word文档)来说,则更加完好,开发人员真正意义上能够全然利用POI去操作一个word文件的所有生命周期(也就是从无到有的过程)。这仅仅是本人简略总结,有不足之处希望看到这篇博客的网友多多吐槽,多多交流。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要下载Java POI API的文档,可以按照下面的步骤进行操作: 1. 使用浏览器打开Java POI API的官方网站(https://poi.apache.org/)。 2. 在网站的顶部导航栏,点击"Documentation"(文档)选项,然后选择"文档"。 3. 这将带您到Java POI API文档的下载页面。在页面上会列出可供下载的不同版本的文档。 4. 根据您当前使用的Java POI API版本,选择相应的文档版本进行下载。常见的版本号包括3.x和4.x。 5. 点击文档版本后面的下载链接,开始下载文档。 另外,如果无法在官方网站上找到文档,还可以尝试在其他Java相关的技术社区或论坛上搜索Java POI API的文档。这些社区可能会有其他用户分享的文档资源或链接。 下载完成后,您可以将文档保存在本地,然后使用适合您的软件(如Adobe Acrobat Reader)打开和阅读文档。在文档,您将找到关于Java POI API的详细说明、用法示例和常见问题解答等信息,这将有助于您更好地理解和使用Java POI API。 ### 回答2: 在 Java 的开发过程,如果需要操作 Microsoft Office 文档(如 Word、Excel 等),可以使用 Apache POI API 库来实现。POI API 提供了大量的类和方法,可以使开发者轻松地读取、写入和修改各种 Office 文档。 关于 POI API 的文档下载,您可以通过以下步骤来获取: 1. 打开 Apache POI 官方网站的下载页面(https://poi.apache.org/download.html)。 2. 拉到页面的最下方,找到 "Stable Releases" 标题下的 "Binaries" 后面的链接。 3. 在页面的 "Binaries" 部分,找到以 "poi-" 开头的稳定版本的链接,点击进入下载页面。 在下载页面您可以看到详细的文件列表,其包含了所需的 JAR 文件和源码文件。 4. 找到 "poi-bin-(版本号).tar.gz" 或者 "poi-bin-(版本号).zip" 的链接,点击下载。这个包含了 POI API 的二进制文件,可以直接在项目使用。 5. 解压缩下载的文件,可以找到 "poi-(版本号).jar" 文件和其他相关的 JAR 文件,将它们添加到您的 Java 项目的构建路径。 现在您就可以开始使用 POI API 来读取、写入或修改 Microsoft Office 文档了。您还可以查看 POI API 的官方文档(https://poi.apache.org/apidocs/index.html)来了解如何使用各种类和方法。 希望这个回答能够帮助到您!如果还有其他问题,请随时提问。 ### 回答3: Java POI API 是一款非常强大的用于操作 Microsoft Office 文档的开源库。POI 在处理 Word 文档、Excel 表格和 PowerPoint 演示文稿方面提供了丰富的功能。对于想要使用 Java 编程语言创建、修改或读取这些办公文档的开发者来说,POI 是一个不可或缺的工具。 要下载 Java POI API 的文档,首先需要打开 Apache POI 的官方网站。在网站的首页上,可以找到 "Download" 或 "下载" 的按钮,点击进入下载页面。 在下载页面,可以看到不同版本的 POI 项目。我们需要找到最新的稳定版本,这个版本包含最新的功能和修复了之前版本的一些 Bug。通常,最新版本会在页面上以醒目的字体展示。 在下载页面上,可以看到有两种类型的文件可供下载:源代码和二进制文件。如果你只需要使用 POI API,而不需要修改源代码,那么选择下载二进制文件就可以了。 在下载二进制文件时,需要根据自己的需要选择合适的文件格式。通常,可以选择 ".jar" 格式的文件。这些文件是已经编译好的可执行文件,可以直接在你的 Java 项目使用。 下载完成后,可以将下载的二进制文件导入到你的 Java 项目,并在代码引入 POI API,就可以开始使用 POI操作 Microsoft Office 文档了。 同时,还可以在 Apache POI 官方网站上找到详细的文档,这些文档会对 POI 的各个功能进行详细的介绍和说明。阅读文档可以帮助开发者更好地理解和使用 POI API。 总之,下载 Java POI API 的文档主要需要通过 Apache POI 的官方网站来完成。下载并引入 POI API 后,可以开始使用该库来操作 Microsoft Office 文档。同时,详细的文档可以帮助开发者更好地掌握 POI 的使用方法和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值