首页 > 编程语言 >Java实现PDF转Word

Java实现PDF转Word

时间:2023-04-11 20:01:09浏览次数:53  
标签:Java aspose getName jar new Word PDF pdf jarName

Java实现PDF转Word
原文链接:https://blog.csdn.net/Mgg9702/article/details/124987483

1、引入jar包或依赖

这里用到的是aspose-pdf,这个依赖需要单独配置仓库地址,也可以直接去官网下载jar包

<repositories>
	<repository>
		<id>AsposeJavaAPI</id>
		<name>Aspose Java API</name>
		<url>https://repository.aspose.com/repo/</url>
	</repository>
</repositories>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

pom文件详情

<dependencies>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-pdf</artifactId>
            <version>22.4</version>
        </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

不会配置仓库地址的话可以去官网下载jar包,官网链接
下面是百度网盘地址里面有未破解和已破解的jar包自行选择下载
链接:https://pan.baidu.com/s/1K4GIH-WnDPwv5wp5_hFSfQ?pwd=0aib
提取码:0aib

2、破解

找到你的jar包地址,引入依赖的去maven仓库地址找到jar,将地址填入代码中的jarPath,运行Main方法会在jar包统计目录下生成破解的包
aspose-pdf-22.4.cracked.jar,替换掉原来jar包就可以了

public class PDFJarCrack {
    public static void main(String[] args) throws Exception {
        String jarPath = "jar包地址";
        crack(jarPath);
    }
    private static void crack(String jarName) {
        try {
            ClassPool.getDefault().insertClassPath(jarName);
            CtClass ctClass = ClassPool.getDefault().getCtClass("com.aspose.pdf.ADocument");
            CtMethod[] declaredMethods = ctClass.getDeclaredMethods();
            int num = 0;
            for (int i = 0; i < declaredMethods.length; i++) {
                if (num == 2) {
                    break;
                }
                CtMethod method = declaredMethods[i];
                CtClass[] ps = method.getParameterTypes();
                if (ps.length == 2
                        && method.getName().equals("lI")
                        && ps[0].getName().equals("com.aspose.pdf.ADocument")
                        && ps[1].getName().equals("int")) {
                    // 最多只能转换4页 处理
                    System.out.println(method.getReturnType());
                    System.out.println(ps[1].getName());
                    method.setBody("{return false;}");
                    num = 1;
                }
                if (ps.length == 0 && method.getName().equals("lt")) {
                    // 水印处理
                    method.setBody("{return true;}");
                    num = 2;
                }
            }
            File file = new File(jarName);
            ctClass.writeFile(file.getParent());
            disposeJar(jarName, file.getParent() + "/com/aspose/pdf/ADocument.class");
        } catch (NotFoundException e) {
            e.printStackTrace();
        } catch (CannotCompileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void disposeJar(String jarName, String replaceFile) {
        List<String> deletes = new ArrayList<>();
        deletes.add("META-INF/37E3C32D.SF");
        deletes.add("META-INF/37E3C32D.RSA");
        File oriFile = new File(jarName);
        if (!oriFile.exists()) {
            System.out.println("######Not Find File:" + jarName);
            return;
        }
        //将文件名命名成备份文件
        String bakJarName = jarName.substring(0, jarName.length() - 3) + "cracked.jar";
        //   File bakFile=new File(bakJarName);
        try {
            //创建文件(根据备份文件并删除部分)
            JarFile jarFile = new JarFile(jarName);
            JarOutputStream jos = new JarOutputStream(new FileOutputStream(bakJarName));
            Enumeration entries = jarFile.entries();
            while (entries.hasMoreElements()) {
                JarEntry entry = (JarEntry) entries.nextElement();
                if (!deletes.contains(entry.getName())) {
                    if (entry.getName().equals("com/aspose/pdf/ADocument.class")) {
                        System.out.println("Replace:-------" + entry.getName());
                        JarEntry jarEntry = new JarEntry(entry.getName());
                        jos.putNextEntry(jarEntry);
                        FileInputStream fin = new FileInputStream(replaceFile);
                        byte[] bytes = readStream(fin);
                        jos.write(bytes, 0, bytes.length);
                    } else {
                        jos.putNextEntry(entry);
                        byte[] bytes = readStream(jarFile.getInputStream(entry));
                        jos.write(bytes, 0, bytes.length);
                    }
                } else {
                    System.out.println("Delete:-------" + entry.getName());
                }
            }
            jos.flush();
            jos.close();
            jarFile.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private static byte[] readStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = -1;
        while ((len = inStream.read(buffer)) != -1) {
            outSteam.write(buffer, 0, len);
        }
        outSteam.close();
        inStream.close();
        return outSteam.toByteArray();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107

控制台输出
在这里插入图片描述

3、pdf转word

填入你的pdf地址运行Main方法即可转换为word文档

public class Pdf2Word {
    public static void main(String[] args) throws IOException {
        pdf2doc("pdf地址");
    }
    //pdf转doc
    public static void pdf2doc(String pdfPath) {
        long old = System.currentTimeMillis();
        try {
            //新建一个word文档
            String wordPath=pdfPath.substring(0,pdfPath.lastIndexOf("."))+".docx";
            FileOutputStream os = new FileOutputStream(wordPath);
            //doc是将要被转化的word文档
            Document doc = new Document(pdfPath);
            //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
            doc.save(os, SaveFormat.DocX);
            os.close();
            //转化用时
            long now = System.currentTimeMillis();
            System.out.println("Pdf 转 Word 共耗时:" + ((now - old) / 1000.0) + "秒");
        } catch (Exception e) {
            System.out.println("Pdf 转 Word 失败...");
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

控制台输出
在这里插入图片描述

标签:Java,aspose,getName,jar,new,Word,PDF,pdf,jarName
From: https://www.cnblogs.com/sunny3158/p/17307467.html

相关文章

  • java将Word转换成PDF三种方法
    java将Word转换成PDF三种方法原文链接:https://blog.csdn.net/weixin_38409915/article/details/125317664网上有很多将Word转换成PDF的方式,这里找了三种比较简单的工具:poi、jacob和aspose。1.POI依赖<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-o......
  • java实现给图片添加水印(文字水印或图片水印)
    java实现给图片添加水印(文字水印或图片水印)原文链接:https://blog.csdn.net/qq_26383975/article/details/125996277本文介绍java实现在图片上加文字水印的方法,水印可以是图片或者文字,操作方便。目录一、java实现给图片添加文字水印1.获取原图片对象信息1.1读取本地图......
  • java arrays类方法parallelSort,学习总结
    Arrays.sort与Arrays.parallelSort区别Arrays.sort()Arrays.sort()方法对对象或原始数据类型的数组进行排序。此方法中使用的排序算法是Dual-Pivot Quicksort。 换句话说,它是快速排序算法的自定义实现,以实现更好的性能。此方法是单线程的 ,有两种变体:sort(array)–将整......
  • java -- Map接口和可变参数
    MapMap:映射,是双列集合顶层接口java.util.Map<k,v>k:key键唯一v:value值可重复常用方法和EntrypublicVput(Kkey,VValue)//指定的键与指定值添加到Map集合中,添加成功返回null,添加失败返回之前的值publicVputIfAbsent(Kkey,VValue)//jdk1.8后新增......
  • (之前的项目复习)我的Java项目实战--校园餐饮商户外卖系统03
    开发笔记三分类管理业务开发公共字段自动填充问题分析前面我们已经完成了后台系统的员工管理功能开发,在新增员工时需要设置创建时间、创建人、修改时间、修改人等字段,在编辑员工时需要设置修改时间和修改人等字段。这些字段属于公共字段,也就是很多表中都有这些字段,如下:能......
  • Java 生成水印图片
    Java生成水印图片原文链接:https://blog.csdn.net/qq_42151956/article/details/121976565工具类返回BufferedImage,写入文件生成水印图片,可见代码一、核心代码/***生成背景透明的文字水印**@paramwidth生成图片宽度*@paramheight生成图片高度*@param......
  • umeditor粘贴图片自动上传到服务器(Java版)
    ​ 当前功能基于PHP,其它语言流程大致相同 1.新增上传wordjson配置在ueditor\php\config.json中新增如下配置:     /* 上传word配置 */    "wordActionName":"wordupload",/* 执行上传视频的action名称 */    "wordFieldName":"upfile",/* 提交的......
  • 在网页中写javascript
    在网页中写Javascript1.在网页中直接嵌入<scriptlanguage="javascript"></script>**script标签可以放在head和body标签里面**<scriptlanguage="javascript">varnow=newDate();varhour=now.getHours();var......
  • 聊聊如何运用JAVA注解处理器(APT)
    什么是APTAPT(AnnotationProcessingTool)它是Java编译期注解处理器,它可以让开发人员在编译期对注解进行处理,通过APT可以获取到注解和被注解对象的相关信息,并根据这些信息在编译期按我们的需求生成java代码模板或者配置文件(比如SPI文件或者spring.fatories)等。APT获取注解及生成代......
  • KindEditor粘贴图片自动上传到服务器(Java版)
    ​图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪贴......