欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java实现PDF转Word的示例代码(无水印无页数限制),

来源: javaer 分享于  点击 43951 次 点评:278

Java实现PDF转Word的示例代码(无水印无页数限制),


目录
  • 一、前言
  • 二、jar破解
    • 1.项目远程仓库配置
    • 2.pom文件引入相关依赖
    • 3.破解代码
  • 三、pdf转word

    一、前言

    学习概述:简单的介绍一下本篇文章要讲解的Java知识点

    学习目标:读者读完这篇文章之后,你希望他掌握你讲解的哪些重要的知识点

    二、jar破解

    1.项目远程仓库配置

    aspose-pdf 这个需要配置单独的仓库地址才能下载,不会配置的可以去官网直接下载jar引入项目代码中。

    <repositories>
            <repository>
                <id>AsposeJavaAPI</id>
                <name>Aspose Java API</name>
                <url>https://repository.aspose.com/repo/</url>
            </repository>
        </repositories>
    

    2.pom文件引入相关依赖

        <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.20.0-GA</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.aspose/aspose-pdf -->
            <dependency>
                <groupId>com.aspose</groupId>
                <artifactId>aspose-pdf</artifactId>
                <version>21.8</version>
            </dependency>
    

    Javassist是一个开源的分析、编辑和创建Java字节码的类库。

    aspose-pdf是一个处理pdf的java类库。

    3.破解代码

     
     
    import javassist.*;
     
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    import java.util.jar.JarEntry;
    import java.util.jar.JarFile;
    import java.util.jar.JarOutputStream;
     
    /**
     * @date 2022-05-16
     * @user tarzan
     */
    public class PDFJarCrack {
     
     
        public static void main(String[] args) throws Exception {
            String jarPath = "E:\\maven_repository\\com\\aspose\\aspose-pdf\\21.8\\aspose-pdf-21.8.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();
        }

    修改你本机的aspose-pdf-21.8.jar路径,然后运行主方法,破解成功后,会再同级文件夹下生成一个aspose-pdf-21.8.cracked.jar包,用这个包替换原来的aspose-pdf-21.8.jar包即可。

    控制台输出

    三、pdf转word

    代码实现

     
    import com.aspose.pdf.Document;
    import com.aspose.pdf.SaveFormat;
     
    import java.io.*;
     
    public class PDFHelper3 {
     
        public static void main(String[] args) throws IOException {
            pdf2doc("C:\\Users\\liuya\\Desktop\\pdf\\中信重工铸锻公司数字化工厂技术要求.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();
            }
        }
     
     
    }

    修改自己的pdf文件路径,运行主方法即可,完成无水印,无页数限制转换word文件

    控制台输出

    到此这篇关于Java实现PDF转Word的示例代码(无水印无页数限制)的文章就介绍到这了,更多相关Java PDF转Word内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

    您可能感兴趣的文章:
    • Java 使用openoffice进行word转换为pdf的方法步骤
    • Java 实现word模板转为pdf
    • Java实现Word/Pdf/TXT转html的实例代码
    • Java实现Word/Excel/TXT转PDF的方法
    • java实现word文档转pdf并添加水印的方法详解
    • Java使用jacob将微软office中word、excel、ppt转成pdf
    相关栏目:

    用户点评