
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