POI实现DOC/DOCX转HTML

2 篇文章 0 订阅

1.使用HWPF处理DOC

public class DocToHtml {  
    
    private static final String encoding = "UTF-8";

    public static String convert2Html(String wordPath)
            throws FileNotFoundException, TransformerException, IOException,
            ParserConfigurationException {
        if( wordPath == null || "".equals(wordPath) ) return "";
        File file = new File(wordPath);
        if( file.exists() && file.isFile() )
            return convert2Html(new FileInputStream(file));
        else
            return "";
    }
    
    public static String convert2Html(String wordPath, String context)
    throws FileNotFoundException, TransformerException, IOException,
    ParserConfigurationException {
        if( wordPath == null || "".equals(wordPath) ) return "";
        File file = new File(wordPath);
        if( file.exists() && file.isFile() )
            return convert2Html(new FileInputStream(file), context);
        else
            return "";
    }
  
    public static String convert2Html(InputStream is)
            throws TransformerException, IOException,
            ParserConfigurationException {
        return convert2Html(is, "");
    }

    public static String convert2Html(InputStream is, HttpServletRequest req) throws TransformerException, IOException,    ParserConfigurationException {
        return convert2Html(is, req.getContextPath());
    }
    
    public static String convert2Html(InputStream is, final String context) throws IOException, ParserConfigurationException, TransformerException {
        HWPFDocument wordDocument = new HWPFDocument(is);
        WordToHtmlConverter converter = new WordToHtmlConverter(
                DocumentBuilderFactory.newInstance().newDocumentBuilder()
                        .newDocument());
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        final String prefix = sdf.format(new Date());
        final Map<Object, String> suffixMap = new HashMap<Object, String>();
        
        converter.setPicturesManager(new PicturesManager() {
                public String savePicture(byte[] content, PictureType pictureType,
                        String suggestedName, float widthInches, float heightInches) {
                    String prefixContext = context.replace("\\", "").replace("/", "");
                    prefixContext = StringUtils.isNotBlank(prefixContext) ? "/" + prefixContext + "/" : prefixContext;
                    suffixMap.put(new String(content).replace(" ", "").length(), suggestedName);
                    
                    return  prefixContext
                            + UeConstants.VIEW_IMAGE_PATH + "/" + UeConstants.UEDITOR_PATH
                            + "/" + UeConstants.UEDITOR_IMAGE_PATH + "/"
                            + prefix + "_"
                            + suggestedName;
                }
        });
        converter.processDocument(wordDocument);
        
        List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
        if (pics != null) {
            for(Picture pic : pics) {
                try {
                    pic.writeImageContent(new FileOutputStream(
                            UeConstants.IMAGE_PATH
                                 + "/" + prefix + "_" + suffixMap.get(new String(pic.getContent()).replace(" ", "").length())));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
        
        StringWriter writer = new StringWriter();
        
        Transformer serializer = TransformerFactory.newInstance().newTransformer();
        serializer.setOutputProperty(OutputKeys.ENCODING, encoding);
        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        serializer.setOutputProperty(OutputKeys.METHOD, "html");
        serializer.transform(
                new DOMSource(converter.getDocument()),
                new StreamResult(writer) );
        writer.close();
        return writer.toString();
    }
}  


2.使用XWPFDocument处理DOCX

public class XHTMLConverterTestCase
    extends AbstractXWPFPOIConverterTest
{

    protected void doGenerate( String fileInName )
        throws IOException
    {
        doGenerateSysOut( fileInName );
        doGenerateHTMLFile( fileInName );
    }

    protected void doGenerateSysOut( String fileInName )
        throws IOException
    {

        long startTime = System.currentTimeMillis();

        XWPFDocument document = new XWPFDocument( AbstractXWPFPOIConverterTest.class.getResourceAsStream( fileInName ) );

        XHTMLOptions options = XHTMLOptions.create().indent( 4 );
        OutputStream out = System.out;
        XHTMLConverter.getInstance().convert( document, out, options );

        System.err.println( "Elapsed time=" + ( System.currentTimeMillis() - startTime ) + "(ms)" );
    }

    protected void doGenerateHTMLFile( String fileInName )
        throws IOException
    {

        String root = "target";
        String fileOutName = root + "/" + fileInName + ".html";

        long startTime = System.currentTimeMillis();

        XWPFDocument document = new XWPFDocument( AbstractXWPFPOIConverterTest.class.getResourceAsStream( fileInName ) );

        XHTMLOptions options = XHTMLOptions.create();// .indent( 4 );
        // Extract image
        File imageFolder = new File( root + "/images/" + fileInName );
        options.setExtractor( new FileImageExtractor( imageFolder ) );
        // URI resolver
        options.URIResolver( new FileURIResolver( imageFolder ) );

        OutputStream out = new FileOutputStream( new File( fileOutName ) );
        XHTMLConverter.getInstance().convert( document, out, options );

        System.out.println( "Generate " + fileOutName + " with " + ( System.currentTimeMillis() - startTime ) + " ms." );
    }
}



项目下载地址:http://download.csdn.net/detail/luka2008/7902285

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
POI(Poor Obfuscation Implementation)是一个Java库,可以用来处理Microsoft Office格式的文件,包括.doc和.docx。要将这些文件换为HTML格式,可以使用POI库的一些功能。 首先,需要引入POI库的相关依赖。然后,使用POI的XWPFDocument类来读取.docx文件,或者使用HSSFWorkbook类来读取.doc文件。它们都提供了访问文件的内容和结构的方法。 读取文件后,可以遍历其中的段落、文本和样式等元素,并将其换为HTML格式。可以使用StringBuilder来拼接HTML文本。例如,可以将每个段落换为一个\<p>标签,每个文本换为一个\<span>标签,并根据样式设置相关属性,如字体、颜色等。 对于嵌入的表格、图片和其他对象,可以使用POI的一些工具类来提取它们的内容,并根据需要换为HTML格式。例如,可以使用XWPFTables获取表格的数据,并将其换为\<table>标签。对于图片,可以使用XWPFPictureData获取图片的二进制数据,并使用Base64编码将其嵌入到HTML中。 最后,将换后的HTML文本保存到文件中或传输到Web页面中即可。 需要注意的是,POI库只提供了对Microsoft Office格式文件的处理功能,不保证100%的换准确性。在使用过程中,可能需要根据具体情况进行一些调整和优化。另外,由于POI是一个开源项目,可以通过查阅官方文档和社区提供的资料来获得更多帮助和支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值