Java中world、PDF、Excel转图片

         相对来说world、pdf转图片还是比较简单的,world、pdf转html坑是最多的。不过我们这篇文章只写world、pdf转图片,后者我将会用另一篇文章就行讲述。

       原理: world、Excel转图片   就是先将内容转成pdf   在将pdf转成图片 

        话不多说 直接贴代码

       首先就是 必须要有的依赖包

 

<!--PDF/excel/world转图片-->
        <dependency>
            <groupId>net.sf.jacob-project</groupId>
            <artifactId>jacob</artifactId>
            <version>1.14.3</version>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>com.aspose</groupId>-->
            <!--<artifactId>aspose-cells</artifactId>-->
            <!--<version>8.5.2</version>-->
        <!--</dependency>-->


        <dependency>
            <groupId>com.sun.pdfview</groupId>
            <artifactId>PDFRenderer</artifactId>
            <version>0.9.1</version>
        </dependency>
  • import java.io.File;
    
    public class FileManage {
        public static void listRoots() {
            // 将根目录存入File数组roots中
            File[] roots = File.listRoots();
            // 打印出根目录
            try {
                for (int i = 0; i < roots.length; i++) {
                    // 打印出根目录下的文件
                    File[] rootfile = roots[i].listFiles();
                    if(rootfile!=null){
                        for (File rf : rootfile) {
                            //  System.out.println(rf);
    //        System.out.println("------------------------------------");
                        }
                    }
                }
            } catch (RuntimeException e) {
                // TODO 自动生成 catch 块
                e.printStackTrace();
            }
        }
        // 删除指定文件或一些文件
        public void deleteFiles(String path, String inname, String inextension) {
            boolean status = true;
            FileManagerFilter fmf = new FileManagerFilter(inname, inextension);
            File file = new File(path);
            File[] filelist = file.listFiles(fmf);
            // System.out.println(filelist.length); 此语句用于测试
            if (filelist.length != 0) {
                for (File fl : filelist) {
                    // boolean delfil = fl.delete();
                    System.out.println(fl + (fl.delete() ? " 成功" : " 没有成功")
                            + "被删除!");
                }
            } else {
                System.out.println("根据您所给的条件,没有找到要删除的文件!");
            }
        }
        // 删除所有目录下所有文件,但是目录没有删除,哈哈其实效果一样
        public void deletAllFile() {
            FileManage fmqq53227117 = new FileManage();
            File[] roots = File.listRoots();
            for (int i = 0; i < roots.length; i++) {
                if (roots[i].isDirectory()) {
                    fmqq53227117.deleteFiles(roots[i].toString(), "*", "*");
                }
            }
        }
    
        //d:\ceshi.pdf
        public  void deleteFile(String filePath) {
            FileManage.listRoots();
            FileManage fm = new FileManage();
            // 此句表示删除G:\下的所有以"Fi"开头的,以"java"结尾的文件
            // 删除指定文件,请慎用!!!本机环境下有G:\盘
            File file = new File(filePath);
    
            //获取文件名 带后缀
            String filename = file.getName();
    
            //获取文件后缀
            String suffix =filename.substring(filename.indexOf(".")+1);
    
            //获取文件名  不带后缀
            String name = filename.substring(0, filename.indexOf("."));
    
    
            System.out.println(name+suffix);
            fm.deleteFiles("D:\\", name, suffix);
            //删除所有目录下文件, 请慎用此方法!!!!!!!!!!!!!!!!!
            //fm.deletAllFile();
        }
    
        public static void main(String args[]) {
            FileManage.listRoots();
            FileManage fm = new FileManage();
            // 此句表示删除D:\下的ceshi文件,以"pdf"结尾的文件
            fm.deleteFiles("D:\\", "ceshi", "pdf");
    
        }
    }

//用到的工具类



import java.io.File;
import java.io.FilenameFilter;

public class FileManagerFilter implements FilenameFilter {
    private String name;
    private String extension;
    public FileManagerFilter(String name, String extension) {
        this.name = name;
        this.extension = extension;
    }
    public boolean accept(File dir, String filename) {
        boolean fileOK = true;
        String str;
        char c;

        if (name == "*"&&extension=="*") {
            return fileOK = true;
        }

        //遍历filename字符串
        for(int i=0;i<filename.length();i++){
            //找出filename字符串中的每个字符
            c =filename.charAt(i);
            //转换为string类型
            str = String.valueOf(c);
            if (name != null&&str.equals(".")) {
                // 不大解理"&="的运行过程,
                //找出文件夹中name相同的
                fileOK &= filename.substring(0, filename.indexOf(".")).equals(name);

                //匹配以name开头的文件名称
//            fileOK &= filename.startsWith(name);
            }
        }

        if (extension != null) {
            //匹配以extension 结尾的文件后缀
            fileOK &= filename.endsWith('.' + extension);
        }
        return fileOK;
    }



}

下面的这段代码 是我在项目实战中用到的  仅供参考  强烈建议大家不要盲目的粘贴复制 ,这些代码 是不全的  况且文件定义的规则也是不一样的 只是让大家看看 我是怎么在项目中用这个封装好的工具类。

   大家可以先启动一下 上面的 main方法 慢慢的找一下 规则 理解一下 

//源文件全路径
            String docfile = path;

            //获取文件全名  带后缀
            String filename = null;

            //文件名  不带后缀
            String name = null;

            File file = new File(docfile);

            //获取文件名 带后缀
            filename = file.getName();
            //获取文件名  不带后缀
            name = filename.substring(0, filename.indexOf("."));
            //        System.out.println(name+"name");
            //用于存放图片的目录
            SimpleDateFormat formatter = new SimpleDateFormat("/YYYYMM/YYYYMMDD/hhmmss-");
            String dateString = formatter.format(new Date());
            String paths = dateString + UUID.randomUUID().toString().replaceAll("-", ""); // 相对路径
            String spath = paths + name;
            String outFile = getUploadPath()+spath;
            //如果目录不存在,就创建新的目录
            if (!new File(outFile).isDirectory()) {
                new File(outFile).mkdirs();
            }
            //存放PDF的路径和PDF的文件名
            String toFile = getUploadPath()+ paths + name;
            //实例化对象WorldToJPG
            FormatToJPG wj = new FormatToJPG();
            //将world文件转换为PDF文件   并返回PDF文件的全路径   17 表示文件格式为PDF
            String filePath = wj.wordToPDF(docfile, toFile, 17);
            try {
                //将PDF文件转换为JPG文件
                pathList = wj.pdfToJPG(filePath, outFile);
                //删除pdf文件
//                new FileManage().deleteFile(filePath);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

到这里第一种方法已经结束了  

ps:大家可以启动一下 main方法测试一下 在线上调用工具类的时候 千万不忘记把 System级别的打印给删除掉

上述是测试代码。是不是非常简单 也不需要什么依赖包

     

下面我说另外一种转图片的方法  是用的 oppenOffice

 

包依赖:这个包需要的话 可以去csdn下载 ,也可以加群 去文件里面自行下载

              QQ群号:         808249297

             下载链接:https://download.youkuaiyun.com/download/weixin_41036106/10711571

   


import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import java.io.File;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

public class OfficeToPDF {

    public void docToPdf(File inputFile, File outputFile){
        //启动服务
        String OpenOffice_HOME = "C:/Program Files (x86)/OpenOffice 4";// 这里是OpenOffice的安装目录
        if(OpenOffice_HOME.charAt(OpenOffice_HOME.length()-1)!='/'){
            OpenOffice_HOME+="/";
        }
        Process pro = null;
        OpenOfficeConnection connection = null;
        // 启动OpenOffice的服务
        String command = OpenOffice_HOME + "program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
        // connect to an OpenOffice.org instance running on port 8100

        try{
            pro = Runtime.getRuntime().exec(command);
            connection = new SocketOpenOfficeConnection(8100);
            connection.connect();

            // convert
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
            System.out.println(inputFile+"="+outputFile);

            converter.convert(inputFile, outputFile);
        }catch(Exception ex){
            System.out.println("程序出错了");
            ex.printStackTrace();

        }finally{
            // close the connection
            if(connection!=null){
                connection.disconnect();
                connection = null;
            }
            pro.destroy();
        }
        System.out.println("生成"+outputFile.getName());
    }


    //生产pdf线程
    static class TestThread extends java.lang.Thread{
        private File inputFile;
        private File outputFile;

        public void run(){
            OfficeToPDF t = new OfficeToPDF();
            t.docToPdf(inputFile, outputFile);
            System.out.println(outputFile.getName()+"文件已生成");
        }

        public void setInputFile(File inputFile) {
            this.inputFile = inputFile;
        }

        public void setOutputFile(File outputFile) {
            this.outputFile = outputFile;
        }
    }


}

     根据自己的文件生成规则  建立输入 输出路径  (跟上述一样 也是 自己在项目中的代码  请忽粘贴,仅供参考)

SimpleDateFormat formatter = new SimpleDateFormat("/YYYYMM/YYYYMMDD/hhmmss-");
            String dateString = formatter.format(new Date());
            String paths = dateString + UUID.randomUUID().toString().replaceAll("-", ""); // 相对路径
            String spath = paths + attachment.getAttachName();
            String outFile = getUploadPath()+spath+".pdf";
            OfficeToPDF wordToPDF = new OfficeToPDF();
            wordToPDF.docToPdf(new File(path), new File(outFile));
            //实例化对象WorldToJPG
            FormatToJPG wj = new FormatToJPG();
            //将PDF文件转换为JPG文件
            String pathJPG =getUploadPath()+ paths+"JPG" + attachment.getAttachName();
            try {
                pathList = wj.pdfToJPG(outFile, pathJPG);
            } catch (IOException e) {
                e.printStackTrace();
            }

大家可能 很男理解这几段代码  我解释一下  我之所以 用完 oppenOffice 这个工具类  在用方法一 讲的 那个工具类 原因就是 我这边 是将excel 转pdf   现在就是在把生成的pdf用第一种方法 转成 图片

    下片文章我将为大家讲述一下  world、PDF、excel如何生成 html

  欢迎大家加java交流群,有问题我们可以一同探讨。

       群号:808249297

       二维码:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值