word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得

                         word和.txt文件转html 及pdf文件, 使用poi jsoup  itext心得本人第一次写博客,有上面不足的或者需要改正的希望大家指出来,一起学习交流讨论。由于在项目中遇到了这一个问题,在网上也找了很多方法,感觉千篇一律,总有一些问题,因此总结出word转html和pdf文件使用方法。虽然poi功能不是很强大,但毕竟不依靠本地office软件,同样还有一种方式使用jacob也可以将word转html,不过这个方式要依靠本地office,而且只能在windows平台下,不支持unix系统。jacob使用起来还是比较简单的,如果大家需要jacob的使用方法,我会分享给大家。关于.txt文件转html,就是使用io操作将.txt文件读取出来然后写入到html中,也不需要额外的jar包。

注意:使用poi需要注意以下几项,由于我在做这个功能的时候没有注意这个问题的存在,一直找不出原因,还请有关大牛门指正一下为什么?

    1.使用office的文档.doc和.docx格式的都没有问题,但使用wps生成的word文档时,只能转.doc格式的文件,对.docx的文档转出后没有图片,得不到img属性。    2.在使用word文档转pdf格式的文件时,生成的pdf没有中文,对中文显示不是很支持。    3.在将word转成pdf时,需要把生成的html文件转化成标准的html文件,不然解析后会出现<meta>或者<img>标签不闭合的情况。    4.使用的jar包如下,都可以在maven中央仓库下载得到。

下面就直接附上代码了,希望大家有什么问题在下面评论互相交流和学习,使用时直接调用方法即可。如果大家觉得可以请点一个赞,谢谢大家。package com.kqco.tools;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.xwpf.converter.core.BasicURIResolver;
import org.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jsoup.Jsoup;
import org.w3c.dom.Document;
import org.w3c.tidy.Tidy;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.pdf.BaseFont;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileConverter {
	/*
	 * word文件转成html文件
	 * sourceFilePath:源word文件路径
	 * targetFilePosition:转化后生成的html文件路径
	 */
	public void wordToHtml(String sourceFilePath, String targetFilePosition) throws Exception {
		if (".docx".equals(sourceFilePath.substring(sourceFilePath.lastIndexOf(".", sourceFilePath.length())))) {
			docxToHtml(sourceFilePath, targetFilePosition);
		} else if (".doc".equals(sourceFilePath.substring(sourceFilePath.lastIndexOf(".", sourceFilePath.length())))) {
			docToHtml(sourceFilePath, targetFilePosition);
		} else {
			throw new RuntimeException("文件格式不正确");
		}

	}

	/*
	 * doc转换为html
	 * sourceFilePath:源word文件路径
	 * targetFilePosition:生成的html文件路径
	 */

	private void docToHtml(String sourceFilePath, String targetFilePosition) throws Exception {
		final Path imagePath = Paths.get(targetFilePosition).getParent().resolve("image");
		HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(sourceFilePath));
		Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
		WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(document);
		// 保存图片,并返回图片的相对路径
		wordToHtmlConverter.setPicturesManager(new PicturesManager() {
			@Override
			public String savePicture(byte[] content, PictureType pictureType, String name, float width, float height) {
				try (FileOutputStream out = new FileOutputStream(imagePath.resolve(name).toString())) {
					out.write(content);
				} catch (Exception e) {
					e.printStackTrace();
				}
				return "../tmp/image/" + name;
			}
		});
		wordToHtmlConverter.processDocument(wordDocument);
		Document htmlDocument = wordToHtmlConverter.getDocument();
		DOMSource domSource = new DOMSource(htmlDocument);
		StreamResult streamResult = new StreamResult(new File(targetFilePosition));
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer serializer = tf.newTransformer();
		serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
		serializer.setOutputProperty(OutputKeys.INDENT, "yes");
		serializer.setOutputProperty(OutputKeys.METHOD, "html");
		serializer.transform(domSource, streamResult);
	}

	/*
	 * docx转换为html
	 * sourceFilePath:源word文件路径
	 * targetFileName:生成的html文件路径
	 */

	private void docxToHtml(String sourceFilePath, String targetFileName) throws Exception {
		String imagePathStr = Paths.get(targetFileName).getParent().resolve("../tmp/image/word/media").toString();
		OutputStreamWriter outputStreamWriter = null;
		try {
			XWPFDocument document = new XWPFDocument(new FileInputStream(sourceFilePath));
			XHTMLOptions options = XHTMLOptions.create();
			// 存放图片的文件夹
			options.setExtractor(new FileImageExtractor(new File(imagePathStr)));
			// html中图片的路径
			options.URIResolver(new BasicURIResolver("../tmp/image/word/media"));
			outputStreamWriter = new OutputStreamWriter(new FileOutputStream(targetFileName), "UTF-8");
			XHTMLConverter xhtmlConverter = (XHTMLConverter) XHTMLConverter.getInstance();
			xhtmlConverter.convert(document, outputStreamWriter, options);
		} finally {
			if (outputStreamWriter != null) {
				outputStreamWriter.close();
			}
		}
	}

	/*
	 * txt文档转html
	   filePath:txt原文件路径
	   htmlPosition:转化后生成的html路径

	*/
	public void txtToHtml(String filePath, String htmlPosition) {
		try {
			String encoding = "GBK";
			File file = new File(filePath);
			if (file.isFile() && file.exists()) { // 判断文件是否存在
				InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
				// 考虑到编码格式
				BufferedReader bufferedReader = new BufferedReader(read);
				// 写文件
				FileOutputStream fos = new FileOutputStream(new File(htmlPosition));
				OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
				BufferedWriter bw = new BufferedWriter(osw);
				String lineTxt = null;
				while ((lineTxt = bufferedReader.readLine()) != null) {
					bw.write(lineTxt + "</br>");
				}
				bw.close();
				osw.close();
				fos.close();
				read.close();
			} else {
				System.out.println("找不到指定的文件");
			}
		} catch (Exception e) {
			System.out.println("读取文件内容出错");
			e.printStackTrace();
		}
	}

	/*
	移动图片到指定路径
	sourceFilePath:原始路径
	targetFilePosition:移动后存放的路径
	*/

	 public  void changeImageUrl(String sourceFilePath,String targetFilePosition) throws IOException {
	        FileInputStream fis = new FileInputStream(sourceFilePath);
	        BufferedInputStream bufis = new BufferedInputStream(fis);

	        FileOutputStream fos = new FileOutputStream(targetFilePosition);
	        BufferedOutputStream bufos = new BufferedOutputStream(fos);
	        int len = 0;
	        while ((len = bufis.read()) != -1) {
	            bufos.write(len);
	        }
	        bufis.close();
	        bufos.close();
	    }

	/*
	 * html文件解析成xhtml,变成标准的html文件
	 * f_in:源html文件路径
	 * outfile: 输出后xhtml的文件路径
	 */
	private boolean parseToXhtml(String f_in, String outfile) {
		boolean bo = false;
		ByteArrayOutputStream tidyOutStream = null; // 输出流
		FileInputStream fis = null;
		ByteArrayOutputStream bos = null;
		ByteArrayInputStream stream = null;
		DataOutputStream to = null;
		try {
			// Reader reader;
			fis = new FileInputStream(f_in);
			bos = new ByteArrayOutputStream();
			int ch;
			while ((ch = fis.read()) != -1) {
				bos.write(ch);
			}
			byte[] bs = bos.toByteArray();
			bos.close();
			String hope_gb2312 = new String(bs, "gb2312");// 注意,默认是GB2312,所以这里先转化成GB2312然后再转化成其他的。
			byte[] hope_b = hope_gb2312.getBytes();
			String basil = new String(hope_b, "gb2312");// 将GB2312转化成 UTF-8
			stream = new ByteArrayInputStream(basil.getBytes());
			tidyOutStream = new ByteArrayOutputStream();
			Tidy tidy = new Tidy();
			tidy.setInputEncoding("gb2312");
			tidy.setQuiet(true);
			tidy.setOutputEncoding("UTF-8");
			tidy.setShowWarnings(true); // 不显示警告信息
			tidy.setIndentContent(true);//
			tidy.setSmartIndent(true);
			tidy.setIndentAttributes(false);
			tidy.setWraplen(1024); // 多长换行
			// 输出为xhtml
			tidy.setXHTML(true);
			tidy.setErrout(new PrintWriter(System.out));
			tidy.parse(stream, tidyOutStream);
			to = new DataOutputStream(new FileOutputStream(outfile));// 将生成的xhtml写入
			tidyOutStream.writeTo(to);
			bo = true;
		} catch (Exception ex) {
			System.out.println(ex.toString());
			ex.printStackTrace();
			return bo;
		} finally {
			try {
				if (to != null) {
					to.close();
				}
				if (stream != null) {
					stream.close();
				}
				if (fis != null) {
					fis.close();
				}
				if (bos != null) {
					bos.close();
				}
				if (tidyOutStream != null) {
					tidyOutStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			System.gc();
		}
		return bo;
	}

	/*
	 * xhtml文件转pdf文件
	 * inputFile:xhtml源文件路径
	 * outputFile:输出的pdf文件路径
	 * imagePath:图片的存放路径   例如(file:/D:/test)
	 */
	private boolean convertHtmlToPdf(String inputFile, String outputFile) throws Exception {
		OutputStream os = new FileOutputStream(outputFile);
		ITextRenderer renderer = new ITextRenderer();
		String url = new File(inputFile).toURI().toURL().toString();
		renderer.setDocument(url);
		// 解决中文支持问题
		ITextFontResolver fontResolver = renderer.getFontResolver();
		fontResolver.addFont("C:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
		// 解决图片的相对路径问题
		renderer.getSharedContext().setBaseURL("imagePath");
		renderer.layout();
		renderer.createPDF(os);
		os.flush();
		os.close();
		return true;
	}

	/*
	 * xhtml转成标准html文件
	 * targetHtml:要处理的html文件路径
	 */
	private static void standardHTML(String targetHtml) throws IOException {
		File f = new File(targetHtml);
		org.jsoup.nodes.Document doc = Jsoup.parse(f, "UTF-8");
		doc.select("meta").removeAttr("name");
		doc.select("meta").attr("content", "text/html; charset=UTF-8");
		doc.select("meta").attr("http-equiv", "Content-Type");
		doc.select("meta").html("&nbsp");
		doc.select("img").html("&nbsp");
		doc.select("style").attr("mce_bogus", "1");
		doc.select("body").attr("font-family", "SimSun");
		doc.select("html").before("<?xml version=‘1.0‘ encoding=‘UTF-8‘>");
		/*
		 * Jsoup只是解析,不能保存修改,所以要在这里保存修改。
		 */
		FileOutputStream fos = new FileOutputStream(f, false);
		OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
		osw.write(doc.html());
		System.out.println(doc.html());
		osw.close();
	}
}

  

时间: 2024-10-02 11:33:06

word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得的相关文章

CAD格式文件怎么转换成PDF文件

CAD文件是一种绘图工具,可以绘制任意二维三维图形,而且绘制精确性高,所以有很多笔者将绘制的作品选择用pdf文件保存下来,那么CAD格式文件怎么转换成PDF文件呢? 这里小编就教大家怎么将CAD格式文件转换成pdf文件,步骤方法如下. 第一步:搜索迅捷pdf在线转换器(http://app.xunjiepdf.com/cad2pdf),找到相关页面点击进入在线网站主页面,进入页面后,用我们鼠标点到文档转换,找到"CAD转PDF"那个栏目. 第二步:点击"选择文件"选

PDF文件如何阅读?PDF文件怎么生成?

办公我们都会用到PDF文件,那么PDF文件如何阅读?PDF文件怎么生成?我们要想阅读PDF文件,就该知道PDF文件是什么? PDF文件是便携式文档,从字面上就可以看出,这是一张方便携带的文档,PDF文件在各个操作系统是通用的,就是因为这一个特点,PDF文件现在已经成为通用文件啦. PDF文件用过的人都熟悉,那么PDF有那些优点? 1阅读方便:PDF文件可以在任何电脑上查看,手机上有些也能查看 2打印:PDF文件是以语言图像模型做基础,在那种打印机上都可以保证精确的打印效果 3加密:你可以随便控制

CAD怎么转PDF文件,CAD转PDF文件的方法

CAD怎么转PDF文件呢?因为PDF文件的实用性,所以办公中很多的文件都需要用PDF文件来进行呈现.那么这样一来办公中就会遇到很多文件和PDF文件之间的转换问题了,如CAD文件和PDF文件的转换问题,那么我们应该如何实现呢?下面就来给大家分享一下吧.步骤一:CAD即计算机辅助设计(Computer Aided Design)指利用计算机及其图形设备帮助设计人员进行设计工作,而CAD文件就是通过这些图形设备制制作保存的文件格式.步骤二:在电脑上将需要转换的CAD文件准备好,然后再通过浏览器搜索"迅

pdf文件怎么修改 修改PDF文件的两种方法

都说PDF格式的文件不能修改,我就呵呵了!不管你们信不信,反正我是不信.因为我会修改PDF文件,并且方法还不止一种.想知道我是怎么修改PDF文件的吗?下面我就告诉大家修改PDF文件的两种方法. 方法一 1.方法一就是将PDF文件转换成一种可容易编辑的文档,如:word.excel.ppt等格式,然后再进行编辑,编辑好后再将其转换成PDF格式,是不是很简单!具体是该如何转换的,下面有详细教程. 2.下载一个PDF转换器,并将它安装在电脑上.工具最好是支持双向转换的那种,如:http://www.x

ppt文件如何转换成为pdf文件

ppt通常是用于制作一些展示性文档的,而有些时候将文档发送给别人不需要用这种格式,要将文档转为pdf格式进行发送.那么ppt文件又是如何转换成为pdf文件的呢. 转换文档格式可以通过转换工具来实现,在转换工具里面的其他文件转换成pdf中有个ppt转pdf选项. 选择转换类型后,点上方或者下方的添加文件,然后把需要转换的ppt文件都添加到列表中. 添加的文件会选项文件名称和总页数,在页码选择一栏中可以输入页面范围,这样转换的时候就会转换设置的页面. 最后点击转换按钮,等文件状态显示处理完成就可以得

递归显示指定文件夹下所有pdf文件

import java.io.File;public class readFile {  public static void main(String[] args) throws Exception {    //递归显示C盘下所有文件夹及其中文件    File root = new File("C:/Users/Administrator/Desktop");    showAllFiles(root);  }   public static void showAllFiles(

C#将制定文件夹下的PDF文件合并成一个并输出至指定路径

/// <summary> /// 将源路径下的PDF合并至目标路径下 /// </summary> /// <param name="SourcePath">源路径</param> /// <param name="TargetPath">目标路径</param> /// <param name="NewFileName">新文件名</param>

PDF文件怎么修改,PDF文件修改的方法

PDF文件怎么修改呢?现在使用PDF文件的人还是比较多的,PDF文件的安全性还是比较高的,导致修改PDF文件就成为一个很棘手的问题,想要修改PDF文件就可以使用到专业的PDF文件来进行操作,下面小编就为大家分享一下迅捷PDF编辑器修改PDF文件的方法. 操作软件:迅捷PDF编辑器 具体操作方法如下: 1:首先将PDF编辑器安装到自己的电脑中,打开PDF编辑器将PDF文件添加到软件中. 2:在软件中可以找到内容编辑工具,点击内容编辑工具,在下面内容的位置双击就可以选中需要更改的文字内容了. 3:选

pdf文件怎么转换成word 最好用的转换方法

想要将pdf转换成word,这非常简单,我们可以将pdf中的文字复制到word中.什么?想要将pdf文件的中各个元素都转换成word,那就需要第三方转换软件了,你有没有使用过效果性能不错的软件呢,小编是常常接触文本转换的人,所以对此颇有一些了解,下面给你一个最好用的转换方法,实现pdf文件怎么转换成word. 第1步:实现简单转换的转换工具我们可以选择迅捷pdf转换器,经过多年的研发,软件一代代的更新大家有目共睹.对于文本格式转换的设置我们已经完全可以完成任意格式了,用户可以任性转,将pdf转换