HTML to word

首先下载iText-2.0.8.jar包。

可将HTML内容转化成word文件,包括图片,可设置图片的像素。

详细代码如下:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.html.simpleparser.StyleSheet;
import com.lowagie.text.rtf.RtfWriter2;
import com.lowagie.text.rtf.style.RtfParagraphStyle;

/**
 * 写入word文件
 * 
 */
public class DocUtil {
	
	protected static Log log = LogFactory.getLog(DocUtil.class);	
	
	/**
	 * 写入文档,其中content为html格式内容,<img>图片标签路径为绝对路径,且该图片一定要存在,否则会抛异常 
	 * @param content 写入的内容 
	 * @param docFilePath 写入的doc文件
	 * @throws Exception
	 */
	public static void writeDocument(String content, String docFilePath) throws Exception{
		OutputStream out = new FileOutputStream(docFilePath);
		Document document = new Document(PageSize.A4);
		RtfWriter2.getInstance(document, out);
		document.open();
		Paragraph context = new Paragraph();
		StyleSheet ss = new StyleSheet();
		
		List htmlList = HTMLWorker.parseToList(new StringReader(content), ss);
		for (int i = 0; i < htmlList.size(); i++) {
			Element e = (com.lowagie.text.Element) htmlList.get(i);
			context.add(e);
		}
		document.add(context);
		document.close();
	}
	
	/**
	 * 写入文档,其中titles,flag,content为相等长度数组

	 * @param mainTitile 文档的大主标题

	 * @param titles 文档的标题

	 * @param flag 文档标识符,1为标题1,2为标题2,3为标题3
	 * @param content 写入的内容,为HTML格式
	 * @param docFilePath 写入的doc文件
	 * @throws Exception
	 */
	public static void writeDocument(String mainTitile,String[] titles,int[] flag, String[] contents, String docFilePath) throws Exception{
		OutputStream out = new FileOutputStream(docFilePath);
		Document document = new Document(PageSize.A4, 90, 90, 72, 72);
		
		RtfWriter2 rw = RtfWriter2.getInstance(document, out);
		rw.getDocumentSettings();		
		
		document.open();
		
		document.addCreationDate();
		
		Font titleFont = new Font(Font.NORMAL, 24, Font.BOLD);
		//设置标题样式,并添加入文档

		Paragraph title = new Paragraph(mainTitile); 
		title.setAlignment(Element.ALIGN_CENTER); 
		title.setFont(titleFont); 
		title.setSpacingAfter(20f);
		title.setSpacingBefore(20f);
		document.add(title);
		int length = 0;
		if(titles.length>flag.length){
			length = flag.length;
		} else {
			length = titles.length;
		}
		if(length > contents.length){
			length = contents.length;
		}
		//循环遍历数组信息
		for(int index=0; index<length; index++){
			//添加标题
			if(titles[index]!=null && titles[index].length()>0){
				Paragraph titleParagraph = new Paragraph(titles[index]);
				titleParagraph.setFont(getTitleStyle(flag[index]));
				document.add(titleParagraph);
			}
			//添加内容
			if(contents[index]!=null && contents[index].length()>0){
				Paragraph context = new Paragraph();
				StyleSheet ss = new StyleSheet();
				List htmlList = HTMLWorker.parseToList(new StringReader(contents[index]), ss);
				for (int i = 0; i < htmlList.size(); i++) {
					Element e = (Element) htmlList.get(i);
					context.add(e);
					for(int j=0; j<e.getChunks().size(); j++){
						Chunk chunk=(Chunk)e.getChunks().get(j);
						Image image=chunk.getImage();
						if(image!=null){
							if(image.getWidth()<550){
								image.scalePercent(75);
							}else{
								image.scalePercent(75*550/image.getWidth());
							}
						}
					}
				}
				document.add(context);
			}
		}
		document.close();
	}
	
	/**
	 * 获取标题样式
	 * @param flag
	 * @return
	 */
	public static RtfParagraphStyle getTitleStyle(int flag){
		RtfParagraphStyle rtfGsBt = null;
		int titleFontSize=14;
		if (flag == 1) {
			rtfGsBt = RtfParagraphStyle.STYLE_HEADING_1;
			titleFontSize = 20;
		} else if (flag == 2) {
			rtfGsBt = RtfParagraphStyle.STYLE_HEADING_2;
			titleFontSize = 18;
		} else if(flag == 3) {
			rtfGsBt = RtfParagraphStyle.STYLE_HEADING_3;
			titleFontSize = 16;
		} else{
			rtfGsBt = RtfParagraphStyle.STYLE_NORMAL;
			titleFontSize = 14;
		}
		rtfGsBt.setAlignment(Element.ALIGN_LEFT); 
		
		rtfGsBt.setLineLeading(12+titleFontSize);
		rtfGsBt.setSize(titleFontSize);
		
		rtfGsBt.setSpacingBefore(20);
		rtfGsBt.setSpacingAfter(20);
		
		return rtfGsBt;
	}
	
	public static void main(String[] args) throws Exception {
		DocUtil.writeDocument("<h1>上传的图片</h1><img src='F:\\Edmin\\nopic.jpg'>", "e://a.doc");
		System.out.println("ok");

	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值