doc转html并图片转base64

package com.lly.demo.util;

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

import com.lly.demo.bean.DocUser;
import com.spire.doc.FileFormat;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.w3c.dom.Document;

import javax.xml.parsers.DocumentBuilderFactory;
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.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import static java.lang.System.out;


//word转html
public class docTohtml {


    public static void main(String[] args) throws Exception {
        docxToHtml();
    }
    public Boolean docTohtml(DocUser docUser) throws Exception {
        String sourceFileName = docUser.getDocname();
        String targetFileName = docUser.getHtmlname();
        String imagePathStr = "D:/doc2htmltest/image/";
        Boolean secORfiled=true;
        HWPFDocument wordDocument = null;
        File file=new File(sourceFileName);
        FileInputStream fileInputStream = new FileInputStream(sourceFileName);
        String docxtodocSourceFileName = docUser.getDocname().substring(0,docUser.getDocname().length()-5)+".doc";
        try {
            if(StringUtils.isNotBlank(sourceFileName)&&StringUtils.isNotBlank(targetFileName)){
                    if(sourceFileName.endsWith(".doc")){

                        if(file.exists()){

                            out.println("aaaaa11111");
                            wordDocument = new HWPFDocument(fileInputStream);
                            out.println("aaaaa");
                            if (wordDocument != null) {
                                WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
                                wordToHtmlConverter.setPicturesManager((a, b, suggestedName, d, e) -> {
                                    // convertFileToBase64()
                                    out.println(suggestedName);

                                    //返回图片路径
                                    //return "image" + File.separator + suggestedName;
                                    //返回图片base64值
                                    return "data:image/"+b.getExtension().toLowerCase()+";base64,"+new String(Base64.encodeBase64(a));
                                });
                                wordToHtmlConverter.processDocument(wordDocument);
                                List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
                                out.println(pics);
                                Iterator var8 = pics.iterator();

                                //转换图片
                                imgToBase64 imgToBase64pl=new imgToBase64();
                                int i=1;
                                while(var8.hasNext()) {
                                    Picture pic = (Picture)var8.next();
                                    //下载图片
                                    // pic.writeImageContent(new FileOutputStream(imagePathStr + pic.suggestFullFileName()));
                                    //System.out.println("第"+i++ +":"+imgToBase64pl.convertFileToBase64(imagePathStr + pic.suggestFullFileName()));
                                }

                                Document htmlDocument = wordToHtmlConverter.getDocument();
                                //生成空文档
                                DOMSource domSource = new DOMSource(htmlDocument);
                                //获取路径下html
                                StreamResult streamResult = new StreamResult(new File(targetFileName));
                                //设置html文件规范
                                TransformerFactory tf = TransformerFactory.newInstance();
                                Transformer serializer = tf.newTransformer();
                                serializer.setOutputProperty("encoding", "utf-8");
                                serializer.setOutputProperty("indent", "yes");
                                serializer.setOutputProperty("method", "html");
                                serializer.transform(domSource, streamResult);
                            }else {
                                out.println("请检查文件类型或后缀是否正确!");
                                secORfiled=false;
                            }

                        }else{
                            out.println("文件不存在");
                            secORfiled=false;
                        }

                    }else if(sourceFileName.endsWith("docx")){
                        System.out.println("上传文件为docx类型");
                        secORfiled=false;
                    }else{
                        out.println("上传文件为其他类型文件");
                        secORfiled=false;
                    }

            }else{
                secORfiled=false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            secORfiled=false;
        }finally {
            fileInputStream.close();
            return secORfiled;
        }


    }

    public static void docxToHtml() throws Exception {

        //D:\zpdtolly\工作总结文档\zpd使用文档\v4\用户使用手册\客户端使用手册
        String sourceFileName = "D:\\zpdtolly\\工作总结文档\\zpd使用文档\\uos+ql飞腾\\uos+麒麟飞腾使用手册-网络版.doc";
        String targetFileName = "D:\\zpdtolly\\工作总结文档\\zpd使用文档\\uos+ql飞腾\\uos+麒麟飞腾使用手册-网络版.html";
        String imagePathStr = "D:/doc2htmltest/image/";
        HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(sourceFileName));
        WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
        wordToHtmlConverter.setPicturesManager((a, b, suggestedName, d, e) -> {
           // convertFileToBase64()
            out.println(suggestedName);

            //返回图片路径
            //return "image" + File.separator + suggestedName;
            //返回图片base64值
            return "data:image/"+b.getExtension().toLowerCase()+";base64,"+new String(Base64.encodeBase64(a));
        });
        wordToHtmlConverter.processDocument(wordDocument);
        List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
        out.println(pics);
        Iterator var8 = pics.iterator();

        //转换图片
        imgToBase64 imgToBase64pl=new imgToBase64();
        int i=1;
        while(var8.hasNext()) {
            Picture pic = (Picture)var8.next();
            //下载图片
           // pic.writeImageContent(new FileOutputStream(imagePathStr + pic.suggestFullFileName()));
            //System.out.println("第"+i++ +":"+imgToBase64pl.convertFileToBase64(imagePathStr + pic.suggestFullFileName()));
        }

        Document htmlDocument = wordToHtmlConverter.getDocument();
        //生成空文档
        DOMSource domSource = new DOMSource(htmlDocument);
        //获取路径下html
        StreamResult streamResult = new StreamResult(new File(targetFileName));
        //设置html文件规范
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer = tf.newTransformer();
        serializer.setOutputProperty("encoding", "utf-8");
        serializer.setOutputProperty("indent", "yes");
        serializer.setOutputProperty("method", "html");
        serializer.transform(domSource, streamResult);
        out.println("doc转换完毕!"+streamResult.getSystemId());


    }

}

依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>demo</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
        <!--引入swagger的依赖-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-examples</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-excelant</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>ooxml-schemas</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.9</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>xdocreport</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.lly.demo.DemoApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

导航样式:

<style type="text/css">

body{background:#e6d8d8;text-align:center;}

div{width:100%;margin:0 auto;background:#ecdfdf;text-align:left;}

* {

  padding: 0;

  margin: 0;

  box-sizing: border-box;

}

.aside {

  width: 240px;

  height: 100%;

  position: fixed;

  left: -240px;

  top: 0px;

  border-right: 1px solid #ccc;

  -ms-transition: all 0.3s linear;

  -moz-transition: all 0.3s linear;

  -webkit-transition: all 0.3s linear;

  transition: all 0.3s linear;

}

.aside:hover{

  left: 0;

}

.aside:hover + .article{

  padding-left: 260px;

}

.nav-list{

  width: 100%;

  height: 100%;

  overflow: auto;

  padding: 10px 0px;

}

.nav-mark{

  position: absolute;

  right: -20px;

  top: 50%;

  z-index: 2;

  height: 80px;

  width: 20px;

  margin-top: -40px;

  background-color: #44a7ff;

  box-shadow: 2px 0px 3px #eee;

  border-radius: 0 40px 40px 0;

  font-size: 12px;

  text-align: center;

  line-height: 24px;

  padding-top: 16px;

  color: #fff;

}

.nav {

  display: block;

  width: 100%;

  height: 32px;

  line-height: 32px;

  font-size: 16px;

  color: #333;

  text-decoration: none;

  padding-left: 20px;

}

.nav:hover {

  background-color: #44a7ff;

  color: #fff;

}

.grade2 {

  text-indent: 1em;

}

.grade3 {

  text-indent: 2em;

}

</style>

<body class="b1 b2" lang=ZH-CN link=blue vlink=purple style='tab-interval:21.0pt;text-justify-trim:punctuation'>

<aside class="aside">

    <div class="nav-list">

<p class="p8">

<span> </span><span class="s3">第1章 前言 </span><a href="#_Toc6535"><span class="s3">4</span></a>

</p>

<p class="p9">

<div class="nav-mark">导航</div>

</aside>

<body>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLY-yy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值