文件預覽

package org.bigdata.framework.docmg.util;

import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;
import java.util.Properties;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.rtf.RTFEditorKit;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.xwpf.converter.core.BasicURIResolver;
import org.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.tools.ant.Main;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;
import org.bigdata.framework.docmg.util.DXFDrawings.ExportSpecificDXFLayoutToPDF;
import org.springframework.beans.factory.annotation.Value;
import org.w3c.dom.Document;

import com.aspose.cad.Image;
import com.aspose.cad.imageoptions.CadRasterizationOptions;
import com.aspose.cad.imageoptions.PdfOptions;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/**
 * 文件適配器
 * @author rhy
 * @time   2018年11月12日 下午4:16:15
 * 
 */
public class FileAdapter {
    
    private final static String  tempPath = "http://localhost:8081/file_server/conver/image";
    private final static String path = "D:\\logs\\conver\\";
//    private final static String path = "/usr/local/preview/628/";
    //存圖片的地方
    //private final static String  tempPath = "modular/browser/files"; //存圖片的地方
    private static Logger logger = Logger.getLogger(FileAdapter.class);
    
    public static void fileAdapter(String src,String desc){
        
        String extName = src.substring(src.lastIndexOf(".")+1).toLowerCase();
        switch (extName) {
        case "txt":
            txtAdapter(src,desc);
            break;
        case "rtf":
//            wordAdapter2(src,desc);
            windowsToPdf(src,desc);
            break;
        case "html":
            htmlAdapter(src,desc);
            break;
        case "doc":
//            wordAdapter2(src,desc);
            windowsToPdf(src,desc);
            break;
        case "docx":
//            wordAdapter2(src,desc);
            windowsToPdf(src,desc);
            break;
        case "wps":
//            wpsAdapter2(src,desc);
            windowsToPdf(src,desc);
            break;
        case "pdf":
            
            pdfAdapter2(src,desc);
            break;
        case "zip":
            
            zipAdapter(src,desc);
            break;
        case "bmp":
            
            imgToHtml(src,desc);
            break;
        case "gif":
            
            imgToHtml(src,desc);
            break;
        case "jpg":
            
            imgToHtml(src,desc);
            break;
        case "pic":
            
            imgToHtml(src,desc);
            break;
        case "png":
            
            imgToHtml(src,desc);
            break;
        case "tif":
            
//            tifToHtml(src,desc);
            windowsToPdf(src, desc);
            break;
        case "wav":
            
            audioToHtml(src,desc);
            break;
        case "flac":
            
            audioToHtml(src,desc);
            break;
        case "mp3":
            
            audioToHtml(src,desc);
            break;
        case "aif":
            
            audioToHtml(src,desc);
            break;
        case "au":
            
            audioToHtml(src,desc);
            break;
        case "ram":
            
            videoToHtml(src,desc);
            break;
        case "wma":
            
            audioToHtml(src,desc);
            break;
        case "amr":
            
            audioToHtml(src,desc);
            break;
        case "aac":
            
            audioToHtml(src,desc);
            break;
        case "mmf":
            
            audioToHtml(src,desc);
            break;
        case "avi":
            
            imgToHtml(src,desc);
            break;
        case "mpg":
            
            videoToHtml(src,desc);
            break;
        case "mov":
            
            videoToHtml(src,desc);
            break;
        case "swf":
            
            videoToHtml(src,desc);
            break;
        case "sys":
            
            imgToHtml(src,desc);
            break;
        case "c":
            
            txtAdapter(src,desc);
            break;
        case "msg":
            
            mapAdapter(src,desc);
            break;
        case "map":
            mapAdapter(src,desc);
            break;
        case "bat":
            
            txtAdapter(src,desc);
            break;
        case "ogg":
            
            videoToHtml(src,desc);
            break;
        case "mp4":
            
            videoToHtml(src,desc);
            break;
        case "webm":
            
            videoToHtml(src,desc);
            break;
        case "xls":
            
//            xlsToPDF(src,desc);
            windowsToPdf(src,desc);
            break;
        case "xlsx":
            
//            xlsToPDF(src,desc);
            windowsToPdf(src,desc);
            break;
        case "dwg":
            
            ExportSpecificDXFLayoutToPDF.dwgExport(src, desc);
            break;
        case "dxf":
            
            ExportSpecificDXFLayoutToPDF.dxfExport(src, desc);
            break;
        case "pptx":
            
//            pptToPDF(src,desc);
            windowsToPdf(src,desc);
            break;
        default:
            
            break;
        }
        
    }
    //dxf類型
    private static void dxfToPDF(String src, String desc) {
        try {
            String dataDir = getDataDir(FileAdapter.class) + "static\\cad\\";
            String srcFile = dataDir + "53b22a155a703.dwg";
            
            Image image = Image.load(srcFile);
            CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
            rasterizationOptions.setPageWidth(1600);
            rasterizationOptions.setPageHeight(1600);
            rasterizationOptions.getLayers().add("0");
            PdfOptions pdfOptions = new PdfOptions();
            pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
            
            image.save(dataDir + "dxf.pdf", pdfOptions);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }         
        
    }
    //dwg類型
    private static void dwgToPDF(String src, String desc) {
        File dir = new File(System.getProperty("user.dir"));
        dir = new File(dir, "src");
        dir = new File(dir, "main");
        dir = new File(dir, "resources");
        
        String dataDir = dir.toString() + "\\static\\cad\\";
        //ExStart:ExportSpecificLayerOfDXFDrawingToPDF
        String srcFile = dataDir + "1.dwg";
        Image image = Image.load(srcFile);
        CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
        rasterizationOptions.setPageWidth(1600);
        rasterizationOptions.setPageHeight(1600);
        rasterizationOptions.getLayers().add("0");

    PdfOptions pdfOptions = new PdfOptions();
    pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
    
    image.save(dataDir + "dwg.pdf", pdfOptions);             
    }
    //ppt類型
    private static void pptToPDF(String src, String desc) {
        try {
//            File file = new File(desc);
//            file.delete();
            ComThread.InitSTA();
            ActiveXComponent app = new ActiveXComponent(
                    "PowerPoint.Application");
            app.setProperty("Visible", false);
            Dispatch ppts = app.getProperty("Presentations").toDispatch();
            Dispatch ppt = Dispatch.call(ppts, "Open", src, true,// ReadOnly
                    true,// Untitled指定文件是否有標題
                    false// WithWindow指定文件是否可見
            ).toDispatch();
            Dispatch.call(ppt, "SaveAs", desc, 32);
            Dispatch.call(ppt, "Close");
            app.invoke("Quit");
        } catch (Exception e) {
        }finally {
            ComThread.Release();
        }
    }
    //excel類型
     public static boolean xlsToPDF(String src, String desc) {
            try {
               ComThread.InitSTA();
                ActiveXComponent app = new ActiveXComponent("Excel.Application");
                app.setProperty("Visible", false);
                Dispatch excels = app.getProperty("Workbooks").toDispatch();
                Dispatch excel = Dispatch.call(excels, "Open", src, false,
                        true).toDispatch();
                
                Dispatch.call(excel, "SaveAs","ExportAsFixedFormat", 0, desc);
                Dispatch.call(excel, "Close", false);
                app.invoke("Quit");
                return true;
            } catch (Exception e) {
                return false;
            }finally {
                ComThread.Release();
            }
           /*ActiveXComponent ax = null;
            Dispatch excel = null;
            try {
                ComThread.InitSTA();
                ax = new ActiveXComponent("Excel.Application");
                ax.setProperty("Visible", false);
                ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
                Dispatch excels = ax.getProperty("Workbooks").toDispatch();

                Object[] obj = new Object[]{ 
                        src, 
                        new Variant(false),
                        new Variant(false) 
                 };
                excel = Dispatch.invoke(excels, "Open", Dispatch.Method, obj, new int[9]).toDispatch();
                
                // 轉換格式
                Object[] obj2 = new Object[]{ 
                        new Variant(0), // PDF格式=0
                        desc, 
                        new Variant(0)  //0=標準 (生成的PDF圖片不會變模糊) ; 1=最小文件
                };
                Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method,obj2, new int[1]);
                    
                return true;
            } catch (Exception es) {
                es.printStackTrace();
                throw es;
            } finally {
                if (excel != null) {
                    Dispatch.call(excel, "Close", new Variant(false));
                }
                if (ax != null) {
                    ax.invoke("Quit", new Variant[] {});
                    ax = null;
                }
                ComThread.Release();
            }*/
        }
        private static void mapAdapter2(String src, String desc) {
            BufferedReader r = null;
            BufferedWriter w = null;
            try {
                r = new BufferedReader(new InputStreamReader(new FileInputStream(src)));
                w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(desc)));
//               if(!new File(desc).exists()){
                   new File(desc).createNewFile();
//               }
                String line = "";
                w.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
                w.write("<div>");
                w.write("<pre>");
                while((line = r.readLine()) != null){
                    
                   w.write(line);
                   w.write("<br>");
                }
                w.write("</pre>");
                w.write("</div>");

                w.write("</body></html>");

            }catch(Exception e){
                logger.info(e);
                e.printStackTrace();
            }finally{
                if(r!=null){
                    try {
                        r.close();
                    } catch (IOException e) {
                        logger.info(e);
                        e.printStackTrace();
                    }
                }
                if(w!=null){
                    try {
                        w.close();
                    } catch (IOException e) {
                        logger.info(e);
                        e.printStackTrace();
                    }
                }
                
            }
        }

    private static void mapAdapter(String src, String desc) {
        BufferedReader r = null;
        BufferedWriter w = null;
        try {
            r = new BufferedReader(new InputStreamReader(new FileInputStream(src)));
            w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(desc)));
//           if(!new File(desc).exists()){
               new File(desc).createNewFile();
//           }
            String line = "";
          
            while((line = r.readLine()) != null){
                
               w.write(line);
              w.write("\n");
            }
          
        }catch(Exception e){
            logger.info(e);
            e.printStackTrace();
        }finally{
            if(r!=null){
                try {
                    r.close();
                } catch (IOException e) {
                    logger.info(e);
                    e.printStackTrace();
                }
            }
            if(w!=null){
                try {
                    w.close();
                } catch (IOException e) {
                    logger.info(e);
                    e.printStackTrace();
                }
            }
            
        }
    }
    //音頻類型
    private static void audioToHtml(String src, String desc) {
        try {
            InputStream inputStream = new FileInputStream(new File(src));
            String file_path = getFilePath("file_path");
            file_path += desc.substring(desc.lastIndexOf("/")+1,desc.lastIndexOf("."));
            
            String local_path = "";
            local_path = desc.substring(0,desc.indexOf("."))+src.substring(src.lastIndexOf("."));
            file_path += src.substring(src.lastIndexOf("."));
            
            OutputStream outputStream = new FileOutputStream(new File(local_path));

            byte[] b = new byte[1024];
            int length = 0;
            while((length = inputStream.read(b))!=-1){
                outputStream.write(b,0,length);
            }
            Writer writer = new FileWriter(new File(desc));
            writer.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
            writer.write("<div align=\"center\">");
            writer.write("<audio controls=\"controls\" src=\""+file_path+"\"  autoplay=\"autoplay\" oncontextmenu=\"return false\"></audio>");
            writer.write("</div>");
            writer.write("<style>");
            writer.write("audio::-webkit-media-controls {overflow: hidden !important}audio::-webkit-media-controls-enclosure {width: calc(100% + 32px);margin-left: auto;}");
            writer.write("</style>");
              writer.write("</body></html>");

          writer.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }

    //視頻類型
    private static void videoToHtml(String src, String desc) {
        try {
            InputStream inputStream = new FileInputStream(new File(src));
            String file_path = getFilePath("file_path");
            file_path += desc.substring(desc.lastIndexOf("/")+1,desc.lastIndexOf("."));
            
            String local_path = "";
            local_path = desc.substring(0,desc.indexOf("."))+src.substring(src.lastIndexOf("."));
            file_path += src.substring(src.lastIndexOf("."));
            
            OutputStream outputStream = new FileOutputStream(new File(local_path));

            byte[] b = new byte[1024];
            int length = 0;
            while((length = inputStream.read(b))!=-1){
                outputStream.write(b,0,length);
            }
            Writer writer = new FileWriter(new File(desc));
            writer.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
            writer.write("<div align=\"center\">");
            writer.write("<video src=\""+file_path+"\" autoplay=\"autoplay\" controls=\"controls\" oncontextmenu=\"return false\"></video>");
            writer.write("</div>");
            writer.write("<style>");
            writer.write("video::-webkit-media-controls {overflow: hidden !important}video::-webkit-media-controls-enclosure {width: calc(100% + 32px);margin-left: auto;}");
            writer.write("</style>");
           writer.write("</body></html>");

           writer.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }

    public static String getFilePath(String filePath){
        
        String file_path = "";
        try{
        Properties properties = new Properties();
        properties.load(FileAdapter.class.getResourceAsStream("/beetl.properties"));
        file_path = properties.getProperty(filePath);
        }catch(Exception e){
            e.printStackTrace();
        }
        
        return file_path;
    }
    //圖片展示
    @SuppressWarnings("resource")
    public static void tifToHtml(String src,String desc){
        
                String file_path = getFilePath("file_path");
                file_path += desc.substring(desc.lastIndexOf("/")+1,desc.lastIndexOf("."));
                String local_path = "";
                local_path = desc.substring(0,desc.indexOf("."))+".jpg";
                file_path += ".jpg";
                ImageInputStream input;
                try {
                    input = ImageIO.createImageInputStream(new File(src));//以圖片輸入流形式讀取到tif
                    ImageReader reader = ImageIO.getImageReaders(input).next();//獲得image閱讀器,閱讀對象爲tif文件轉換的流
                    String path,tiffName;
                    path = src.substring(0, src.lastIndexOf("."));
                    tiffName = src.substring(src.lastIndexOf("\\"),src.lastIndexOf("."));
                    try {
                        reader.setInput(input);
                        int count = reader.getNumImages(true);//tif文件頁數
                        for(int i = 0; i < count; i++){
                            BufferedImage image = reader.read(i, null);//取得第i頁
                            File f = new File(local_path);
                            try {
                                if(!f.exists()){
                                    f.getParentFile().mkdirs();
                                    f.createNewFile();
                                }
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            ImageIO.write(image, "JPEG", f);//保存圖片
                        }
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                    finally {
                        reader.dispose();
                        input.close();
                    }
                    Writer writer = new FileWriter(new File(desc));
                    writer.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
                    writer.write("<div align=\"center\">");
                    writer.write("<img src=\""+file_path+"\" width=\"800px\" height=\"600px\">");
                    writer.write("</div>");
                    writer.write("</body></html>");

                    writer.close();
                }catch (IOException e) {
                    e.printStackTrace();
                }
    }

    //圖片展示
    @SuppressWarnings("resource")
    public static void imgToHtml(String src,String desc){

        try {
            InputStream inputStream = new FileInputStream(new File(src));
            String file_path = getFilePath("file_path");
            file_path += desc.substring(desc.lastIndexOf("/")+1,desc.lastIndexOf("."));
            
            String local_path = "";
            if(src.endsWith("tif")){
                local_path = desc.substring(0,desc.indexOf("."))+".png";
                file_path += ".png";
            }else{
                local_path = desc.substring(0,desc.indexOf("."))+src.substring(src.lastIndexOf("."));
                file_path += src.substring(src.lastIndexOf("."));
            }
            
            OutputStream outputStream = new FileOutputStream(new File(local_path));

            byte[] b = new byte[1024];
            int length = 0;
            while((length = inputStream.read(b))!=-1){
                outputStream.write(b,0,length);
            }
            Writer writer = new FileWriter(new File(desc));
            writer.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
            writer.write("<div align=\"center\">");
            writer.write("<img src=\""+file_path+"\">");
            writer.write("</div>");
            writer.write("</body></html>");

           writer.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    private static void zipAdapter(String src, String desc) {
        try{
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(desc)));
            desc = src.substring(0,src.lastIndexOf(".zip"));
            unzip(src, desc);
            String fileDirData = getZipJson(src,desc);
            writer.write("<!DOCTYPE html><HTML><HEAD>    <TITLE></TITLE><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">");
            writer.write("\n");
            writer.write("<link rel=\"stylesheet\" href=\"http://10.215.4.148:8081/file_server/resources/css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">");
            writer.write("\n");
            writer.write("<script type=\"text/javascript\" src=\"http://10.215.4.148:8081/file_server/resources/js/jquery-1.4.4.min.js\"></script>");
            writer.write("\n");
            writer.write("<script type=\"text/javascript\" src=\"http://10.215.4.148:8081/file_server/resources/js/jquery.ztree.core.js\"></script>");
            writer.write("\n");
            writer.write("<SCRIPT type=\"text/javascript\">");
            writer.write("\n");
            writer.write("var setting = {view:{showLine:false},callback:{onDblClick:getPath}};");
            writer.write("\n");
            writer.write(fileDirData);
            writer.write("\n");
            writer.write("$(document).ready(function(){$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);});");
            writer.write("\n");
            writer.write("function getPath(event, treeId, treeNode){if(treeNode != null && treeNode.name.indexOf('.')>0){$('iframe').attr('src',treeNode.filePath)");
            writer.write("\n");
            writer.write("return;}}");
            writer.write("\n");
            writer.write("$(function(){var screenWidth = window.screen.width;    var screenHeight =  window.screen.height;$('iframe').attr('width',(screenWidth-350)+'px');$('iframe').attr('height',screenHeight + 'px');})");
            writer.write("\n");
            writer.write("</SCRIPT></HEAD><BODY>");
            writer.write("\n");
            writer.write("<div class=\"content_wrap\">");
            writer.write("\n");
            writer.write("<div class=\"zTreeDemoBackground left\" style=\"float:left;width:300px;\"><ul id=\"treeDemo\" class=\"ztree\"></ul></div>");
            writer.write("\n");
            writer.write("<div class=\"zTreeDemoBackground\" style=\"margin-left:100px;\"><iframe src=\"\" frameborder=\"0\"></iframe>");
            writer.write("\n");
            writer.write("</div></div></BODY></HTML>");
            
            writer.close();
        
        }catch(Exception e){
            
            e.printStackTrace();
        }
    }
    

  //zip類型
    public static String getZipJson(String src,String desc) {
        StringBuilder buf=new StringBuilder();
        if(src == null){
            return null;
        }
        buf.append("var zNodes =");
        File f = new File(desc);
        if (f.isDirectory())
        {
            scan(new File(desc),buf);
            buf.delete(buf.length() - 2, buf.length());
        }
        else if(f.getName() != null &&  f.getName().indexOf(".")!=-1){
            buf.append("{").append("\"name\":\"").append(f.getName()).append("\"");
        }
        return buf.append("}").toString();
    }

    private static void scan(File f,StringBuilder buf) {
        if (f.isDirectory())
        {
            buf.append("{").append("\"name\":\"").append(f.getName()).append("\",").append("\"filePath\":\"\",").append("\"children\":[");
            // Arrays.asList(f.listFiles()).forEach(this::scan);
            File[] files = f.listFiles();
            for(int i=0;i<files.length;i++){
                scan(files[i],buf);
            }
            if(buf.toString().endsWith("\"children\":["))
                buf.append("{\"name\":\"暫無文件\",\"path\":\"\",");
            buf.delete(buf.length() - 2, buf.length());
            buf.append("}").append("]").append("},");
        }
        else if(f.getName() != null &&  f.getName().indexOf(".")!=-1)  {
            
            //
            String filePath = getFilePath("file_path");
            filePath +=f.getName().substring(0,f.getName().lastIndexOf("."))+".html";
            String newPath = getFilePath("new_path")+f.getName().substring(0,f.getName().lastIndexOf("."))+".html";
            fileAdapter(f.getAbsolutePath(),newPath);
            //buf.append("{").append("\"name\":\"").append(f.getName()).append("\"").append(",\"filePath\":\"").append(f.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\")).append("\"},");
            buf.append("{").append("\"name\":\"").append(f.getName()).append("\"").append(",\"filePath\":\"").append(filePath.replaceAll("\\\\", "\\\\\\\\")).append("\"},");
        }
    }
    //zip類型
    private static void unzip(String sourceZip,String destDir) throws Exception{

        try{
            Project p = new Project();
            Expand e = new Expand();
            e.setProject(p);
            e.setSrc(new File(sourceZip));
            e.setOverwrite(false);
            e.setDest(new File(destDir));
           /*
               ant下的zip工具默認壓縮編碼爲UTF-8編碼,
                   而winRAR軟件壓縮是用的windows默認的GBK或者GB2312編碼
                   所以解壓縮時要制定編碼格式
           */
            e.setEncoding("gbk");
            e.execute();
        }catch(Exception e){
            throw e;
        }
    }
    // wps類型文件
    public static void wpsAdapter(String inputFile, String pdfFile) {
        try {
            File file = new File(pdfFile);
            file.delete();
//            file.createNewFile();
            ActiveXComponent app = new ActiveXComponent("Word.Application");
            app.setProperty("Visible", false);
            Dispatch docs = app.getProperty("Documents").toDispatch();
            Dispatch doc = Dispatch.call(docs, "Open", inputFile, false, true)
                    .toDispatch();
//           Dispatch.call(doc, "SaveAs","ExportAsFixedFormat", pdfFile, 17);
            Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { pdfFile, new Variant(8) }, new int[1]);

            Dispatch.call(doc, "Close", false);
            app.invoke("Quit", 0);
        } catch (Exception e) {
        }
    }
    //word類型文件
       public static void wordAdapter(String src,String desc){

            try {
                /*final String path = "D:\\poi-test\\wordToHtml\\";
                final String file = "人員選擇系分.doc";*/
                InputStream input = new FileInputStream(src);
                HWPFDocument wordDocument = new HWPFDocument(input);
                WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
                        DocumentBuilderFactory.newInstance().newDocumentBuilder()
                                .newDocument());
                wordToHtmlConverter.setPicturesManager(new PicturesManager() {
                    public String savePicture(byte[] content, PictureType pictureType,
                                              String suggestedName, float widthInches, float heightInches) {
                        return suggestedName;
                    }
                });
                wordToHtmlConverter.processDocument(wordDocument);
                List pics = wordDocument.getPicturesTable().getAllPictures();
                if (pics != null) {
                    for (int i = 0; i < pics.size(); i++) {
                        Picture pic = (Picture) pics.get(i);
                        try {
                            pic.writeImageContent(new FileOutputStream(desc
                                    + pic.suggestFullFileName()));
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        }
                    }
                }
                Document htmlDocument = wordToHtmlConverter.getDocument();
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                DOMSource domSource = new DOMSource(htmlDocument);
                StreamResult streamResult = new StreamResult(outStream);
                TransformerFactory tf = TransformerFactory.newInstance();
                Transformer serializer = tf.newTransformer();
                serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
                serializer.setOutputProperty(OutputKeys.INDENT, "yes");
                serializer.setOutputProperty(OutputKeys.METHOD, "html");
                serializer.transform(domSource, streamResult);
                outStream.close();
                String content = new String(outStream.toByteArray());
                FileUtils.writeStringToFile(new File(desc), content, "utf-8");

            }catch(Exception e){
                try {
                    XWPFDocument document = new XWPFDocument(new FileInputStream(src));
                    XHTMLOptions options = XHTMLOptions.create().indent(4);
                    // 導出圖片
                    String file_path = getFilePath("file_path");
//                    File imageFolder = new File("d:\\logs\\conver\\image");
                    File imageFolder = new File(file_path);
                     if(!imageFolder.getParentFile().exists()){
                         imageFolder.getParentFile().mkdirs();
                       }
                    options.setExtractor(new FileImageExtractor(imageFolder));
                    // URI resolver
                    /*options.URIResolver(new IURIResolver() {
                        
                        @Override
                        public String resolve(String uri) {
                            return uri;
                        }
                    });*/
                    //options.URIResolver(new FileURIResolver(imageFolder));
                    options.URIResolver(new BasicURIResolver(tempPath));
                    File outFile = new File(desc);
                       if(!outFile.exists()){
                           outFile.createNewFile();
                       }
                    outFile.getParentFile().mkdirs();
                    OutputStream out = new FileOutputStream(outFile);
                    XHTMLConverter.getInstance().convert(document, out, options);
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
       //word轉pdf
       public static void wordAdapter2(String src,String desc){
           
          try {
                  ComThread.InitSTA(); 
                ActiveXComponent app = new ActiveXComponent("Word.Application");
                app.setProperty("Visible", false);
                Dispatch docs = app.getProperty("Documents").toDispatch();
                Dispatch doc = Dispatch.call(docs, "Open", src, false, true)
                        .toDispatch();
               Dispatch.call(doc, "ExportAsFixedFormat", desc, 17);// word保存爲pdf格式宏,值爲17
                Dispatch.call(doc, "Close", false);
                app.invoke("Quit", 0);
          }catch(Exception e){
              
              
          }finally {
              ComThread.Release();
        }
           
       }
       //rtf類型
        public static void rtfAdapter(String src,String desc){

            try {
                RTFEditorKit rtf=new RTFEditorKit();
                DefaultStyledDocument dsd=new DefaultStyledDocument();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(desc)));
                try {
                    rtf.read(new FileInputStream(new File(src)), dsd, 0);
                   String text = new String(dsd.getText(0, dsd.getLength()));
                    writer.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
                  writer.write("<pre>");
                   writer.write(text.replaceAll("[ ]","&nbsp"));
                    writer.write("</pre>");
                    writer.write("</body></html>

               writer.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    //html類型
        public static void htmlAdapter(String src,String desc) {
            BufferedReader r = null;
            BufferedWriter w = null;
            try {
                r = new BufferedReader(new InputStreamReader(new FileInputStream(src)));
                w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(desc)));
               if(!new File(desc).exists()){
                   new File(desc).createNewFile();
               }
                String line = "";
               w.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
               
                while((line = r.readLine()) != null){
                    //String result = new String(line.getBytes("gbk"),"utf-8");
//                    w.write("<xmp>");
                  // w.write(line.replaceAll("[ ]","&nbsp"));
                   w.write(line);
//                   w.write("</xmp>");
                   w.write("<br>");
                }    
                w.write("</body></html>

            }catch(Exception e){
                logger.info(e);
                e.printStackTrace();
            }finally{
                if(r!=null){
                    try {
                        r.close();
                    } catch (IOException e) {
                        logger.info(e);
                        e.printStackTrace();
                    }
                }
                if(w!=null){
                    try {
                        w.close();
                    } catch (IOException e) {
                        logger.info(e);
                        e.printStackTrace();
                    }
                }
                
            }
        }

       //txt類型文件
    public static void txtAdapter(String src,String desc) {
        BufferedReader r = null;
        BufferedWriter w = null;
        try {
            r = new BufferedReader(new InputStreamReader(new FileInputStream(src)));
            w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(desc)));
//           if(!new File(desc).exists()){
               new File(desc).createNewFile();
//           }
            String line = "";
            w.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
           // w.write("<div style=\"margin:0 180px;background-color:#dff0d8;border:1px;overflow:hidden;\"");
            w.write("<div>");
            w.write("<pre>");
           
            while((line = r.readLine()) != null){
                //String result = new String(line.getBytes("gbk"),"utf-8");
               w.write(line.replaceAll("[ ]","&nbsp"));
               w.write("<br>");
            }
            w.write("</pre>");
            w.write("</div>");
            w.write("</body></html>

       }catch(Exception e){
            logger.info(e);
            e.printStackTrace();
        }finally{
            if(r!=null){
                try {
                    r.close();
                } catch (IOException e) {
                    logger.info(e);
                    e.printStackTrace();
                }
            }
            if(w!=null){
                try {
                    w.close();
                } catch (IOException e) {
                    logger.info(e);
                    e.printStackTrace();
                }
            }
            
        }
    }

//pdf類型
    public static void pdfAdapter(String src,String desc){
        try  {
            PDDocument document = PDDocument.load(new File(src));
            document.getClass();
            BufferedWriter writer = new BufferedWriter(new FileWriter(new File(desc)));
            if(!document.isEncrypted()) {
                PDFTextStripperByArea stripper = new PDFTextStripperByArea();
                stripper.setSortByPosition(true);
                PDFTextStripper tStripper = new PDFTextStripper();
                String pdfFileInText = tStripper.getText(document);
                String[] lines = pdfFileInText.split("\\r?\\n");
                writer.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title></title></head><body>");
                for(String line : lines) {

                    writer.write(line);
                    writer.write("<br>");
                }
                writer.write("</body></html>

               writer.close();
            }
        }  catch (IOException e) {

            e.printStackTrace();
        }
    }

//複製的方式
    public static void pdfAdapter2(String src,String desc){
        
        InputStream is = null;
        OutputStream os = null;
        try{
        is = new FileInputStream(new File(src));
        os = new FileOutputStream(new File(desc));
        
        int length = 0;
        byte[] b = new byte[1024];
        while((length = is.read(b)) != -1){
            os.write(b, 0, length);
            
        }
        }catch(Exception e){
            
            e.printStackTrace();
        }finally {
            try {
                if(is != null){
                is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            try {
                if(os != null){
                os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
    
     private static void wpsAdapter2(String src, String desc){

            
            try {
                InputStream input = new FileInputStream(src);
                HWPFDocument wordDocument = new HWPFDocument(input);
                WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
                        DocumentBuilderFactory.newInstance().newDocumentBuilder()
                                .newDocument());
                wordToHtmlConverter.setPicturesManager(new PicturesManager() {
                    public String savePicture(byte[] content, PictureType pictureType,
                                              String suggestedName, float widthInches, float heightInches) {
                        return suggestedName;
                    }
                });
                wordToHtmlConverter.processDocument(wordDocument);
                List pics = wordDocument.getPicturesTable().getAllPictures();
                if (pics != null) {
                    for (int i = 0; i < pics.size(); i++) {
                        Picture pic = (Picture) pics.get(i);
                        try {
                            pic.writeImageContent(new FileOutputStream(path
                                    + pic.suggestFullFileName()));
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        }
                    }
                }
                Document htmlDocument = wordToHtmlConverter.getDocument();
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
                DOMSource domSource = new DOMSource(htmlDocument);
                StreamResult streamResult = new StreamResult(outStream);
                TransformerFactory tf = TransformerFactory.newInstance();
                Transformer serializer = tf.newTransformer();
                serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
                serializer.setOutputProperty(OutputKeys.INDENT, "yes");
                serializer.setOutputProperty(OutputKeys.METHOD, "html");
                serializer.transform(domSource, streamResult);
                outStream.close();
                String content = new String(outStream.toByteArray());
                FileUtils.writeStringToFile(new File(desc), content, "utf-8");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public static String getDataDir(Class c) {
            File dir = new File(System.getProperty("user.dir"));
            dir = new File(dir, "src");
            dir = new File(dir, "main");
            dir = new File(dir, "resources");
            
            return dir.toString() + File.separator;
        }
        //windows 產品轉換爲 pdf
        public static void windowsToPdf(String src,String desc){
            File file = new File(src);
            String path = file.getParent();
//            src = src.replaceAll("\\\\", "\\\\\\\\");
//            path = path.replaceAll("\\\\","\\\\\\\\");
            try {
                String osName = System.getProperty("os.name");
                String command = "";
                if (osName.contains("Windows")) {
//                    command = "soffice --convert-to pdf -outdir " + path + " " + src;
                    command = "soffice.exe --headless --invisible --convert-to pdf "+src+" --outdir "+path;
                } else {
//                    command = "doc2pdf --output=" + path + File.separator + file.getName().replaceAll(".(?i)docx", ".pdf") + " " + src;
                    command = "libreoffice6.1 --headless --invisible --convert-to pdf "+src+" --outdir "+path;
                }
                executeCommand(command);
                File temPdf = new File(src.substring(0,src.lastIndexOf("."))+".pdf");
                temPdf.renameTo(new File(desc));
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public static String executeCommand(String command) {
            StringBuffer output = new StringBuffer();
            Process p = null;
            InputStreamReader inputStreamReader = null;
            BufferedReader reader = null;
            try {
                p = Runtime.getRuntime().exec(command);
                p.waitFor();
                inputStreamReader = new InputStreamReader(p.getInputStream(), "UTF-8");
                reader = new BufferedReader(inputStreamReader);
                String line = "";
                while ((line = reader.readLine()) != null) {
                    output.append(line + "\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                if(inputStreamReader != null){
                    try {
                        inputStreamReader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(reader != null){
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(p != null){
                    p.destroy();
                }
            }
            return output.toString();

        }

pom文件如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.bigdata.framework</groupId>
    <artifactId>nm-framework-docmg-admin</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        
        <!-- nm-docmg-api -->
        <dependency>  
              <groupId>org.bigdata.framework</groupId>  
              <artifactId>nm-framework-docmg-api</artifactId> 
              <version>0.0.1-SNAPSHOT</version> 
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        
        <!-- 讀取配置文件解析器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!-- 上傳組件包 -->
         <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency> 
        
        <!-- <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
         -->
        <!-- beetl模板 -->
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl-framework-starter</artifactId>
            <version>1.1.19.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>com.ibeetl</groupId>
                    <artifactId>beetlsql</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <!-- aop -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        
        <!-- shiro -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <version>1.4.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <!-- 驗證碼-->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>
        
         <!-- <dependency>  
              <groupId>com.ninemax.common</groupId>  
              <artifactId>getvideotime</artifactId> 
              <version>1.0.0</version> 
        </dependency -->
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        
        <!-- 文件內容讀取 -->
        <!--  <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.12</version>
        </dependency>-->
        
        <!-- 解壓縮 -->
        <dependency>
            <groupId>net.lingala.zip4j</groupId>
            <artifactId>zip4j</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
        <groupId>com.github.junrar</groupId>
            <artifactId>junrar</artifactId>
            <version>0.7</version>
        </dependency>
        
       <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.6</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.9</version>
        </dependency>
                <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.document</artifactId>
            <version>2.0.1</version>
        </dependency>

        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>org.apache.poi.xwpf.converter.core</artifactId>
            <version>1.0.6</version>
        </dependency>

        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
            <version>1.0.6</version>
        </dependency>

        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId>
            <version>1.0.6</version>
        </dependency>
    <dependency>
        <groupId>net.sf.jacob-project</groupId>
        <artifactId>jacob</artifactId>
        <version>1.14.3</version>
    </dependency>
     <dependency>
         <groupId>ant</groupId>
         <artifactId>ant</artifactId>
         <version>1.6.5</version>
     </dependency>
     <dependency>
         <groupId>de.innosystec</groupId>
         <artifactId>java-unrar</artifactId>
         <version>0.3</version>
     </dependency>
     <!-- tif文件預覽 -->
           <dependency>
            <groupId>com.github.jai-imageio</groupId>
            <artifactId>jai-imageio-core</artifactId>
            <version>1.3.1</version>
        </dependency>
<!--         cad文件預覽 -->
       <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-cad</artifactId>
            <version>18.3</version>
            <classifier>jdk16</classifier>
        </dependency>
    </dependencies>
    
     <build>
        <finalName>docmg-admin</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>${spring-loaded.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build> 

</project>
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章