All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.virens.office.factory.html.AbstractToHtmlFactory Maven / Gradle / Ivy

package cn.virens.office.factory.html;

import java.io.Closeable;
import java.io.OutputStream;

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 org.w3c.dom.Document;

import cn.virens.common.fun.ExFunction;
import cn.virens.office.factory.AbstractFactory;

/**
 * 文档转换为HTML基础工厂类型
 * 
 * @author     Virens
 * @param   文档类型
 * @param   处理返回
 */
public abstract class AbstractToHtmlFactory implements AbstractFactory {

	/**
	 * 将dom树结构转换为html,并输出到输出流中
	 * 
	 * @param  outputStream 输出流
	 * @param  htmlDocument dom树
	 * @throws Exception    异常
	 */
	protected void transform(OutputStream outputStream, Document htmlDocument) throws Exception {
		StreamResult streamResult = new StreamResult(outputStream);

		// 构建转换工厂
		TransformerFactory tf = TransformerFactory.newInstance();

		// 创建执行从 Source 到 Result 的复制的新 Transformer。
		Transformer serializer = tf.newTransformer();
		serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // 文件编码方式
		serializer.setOutputProperty(OutputKeys.METHOD, "html"); // 指定输出文件的后缀名
		serializer.setOutputProperty(OutputKeys.INDENT, "yes"); // indent 指定了当输出结果树时,Transformer

		// 将DOM树结构转为Html输出到指定流中
		DOMSource domSource = new DOMSource(htmlDocument);
		serializer.transform(domSource, streamResult);
	}

	/**
	 * 加载文档(使用完成后执行文档关闭)
	 * 
	 * @param  document  加载的文档
	 * @param  function  文档处理
	 * @return           返回处理结果
	 * @throws Exception 异常
	 */
	protected R loadDocument(T document, ExFunction function) throws Exception {
		try (AutoCloseable closeable = document) {
			return function.apply(document);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy