java使用aspose.pdf或者spire.pdf 将pdf文件转word,实测

1. aspose.pdf

aspose.pdf不是破解版的只能转3页,所以我弄了个破解版, aspose.pdf破解版在网上都有破解方法也比较简单,这里就不说了,直接引入破解版的jar包,在这里我用的是aspose-pdf-21.11.jar版本,代码比较简单

 long startTime = System.currentTimeMillis();
        try (
                InputStream in = new FileInputStream("C:\\Users\\JBW\\Desktop\\测试.pdf");
                OutputStream out = new FileOutputStream("C:\\Users\\JBW\\Desktop\\导出.docx");
        ) {
            com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(in);
            System.out.println("初始化doc耗时:" + (System.currentTimeMillis()-startTime));
            pdfDoc.save(out, com.aspose.pdf.SaveFormat.Doc);
            System.out.println("耗时:" + (System.currentTimeMillis()-startTime));
            pdfDoc.close();
        }

我的pdf有12页,然后我这样转发现用了将近120多秒
java使用aspose.pdf或者spire.pdf 将pdf文件转word,实测_第1张图片

2. spire.pdf

spire.pdf也是需要收费的,免费版的将pdf转word文档只能转10页,我搜索了一些资料,也是不知道怎么实现破解版,所以这里就用免费版的。但是就是这十页,只用了 10秒左右。这个代码也比较简单

 public static void main(String[] args) {
 long startTime = System.currentTimeMillis();
        String srcPath = "C:\\Users\\JBW\\Desktop\\测试.pdf";

        String desPath = "C:\\Users\\JBW\\Desktop\\导出.docx";
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile(srcPath);
        //保存为Word格式
        pdf.saveToFile(desPath, FileFormat.DOCX);
        removeWatermark(new File(desPath));
        System.out.println("耗时:"+ (System.currentTimeMillis()-startTime));
        }

 //移除文字水印
    public static boolean removeWatermark(File file) {
        try {
            XWPFDocument doc = new XWPFDocument(new FileInputStream(file));
            //添加水印
            addWaterMark(doc, "测试");
            // 段落
            List paragraphs = doc.getParagraphs();
            for (XWPFParagraph paragraph : paragraphs) {
                String text=paragraph.getText();
                if (text.contains("Evaluation Warning")){
                    List runs = paragraph.getRuns();
                    runs.forEach(e-> e.setText("",0));
                }
            }
            FileOutputStream outStream = new FileOutputStream(file);
            doc.write(outStream);
            outStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

removeWatermark方法是去除spire.pdf水印的。
因为上面的代码只能转十页,所以我们换个思路,我们把pdf文件每页生成一份pdf,然后将pdf转成docx文档,在将docx文档合并起来,这样就可以实现,耗时的话是50多秒,也是比上面的aspose.pdf破解版快,代码

 public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        String srcPath = "C:\\Users\\JBW\\Desktop\\测试.pdf";

        String desPath = "C:\\Users\\JBW\\Desktop\\导出.docx";
        // 加载原始 PDF 文件
        PdfDocument originalPdf = new PdfDocument();
        originalPdf.loadFromFile(srcPath);

        // 创建一个新的空白 Word 文档,用于存储合并后的页面
        Document mergedDoc = new Document();
        // 遍历每一页,将其转换为 Word 文档并添加到新文档中
        for (int i = 0; i < originalPdf.getPages().getCount(); i++) {
            // 提取单个页面
            PdfDocument page = new PdfDocument();
            page.insertPage(originalPdf, i);
            // 将单个页面保存为 Word (.docx) 格式文件
            String tempDocxPath = "temp_page_"+i+".docx";
            page.saveToFile(tempDocxPath, FileFormat.DOCX);

            // 加载临时 Word 文档并将其添加到最终的合并文档中
            if (i ==0){
                mergedDoc.loadFromFile(tempDocxPath);
            } else {
                mergedDoc.insertTextFromFile(tempDocxPath, com.spire.doc.FileFormat.Docx_2013);
            }
            // 删除临时文件
            File file = new File(tempDocxPath);
            file.delete();
        }
        // 保存合并后的 PDF 文件
        mergedDoc.saveToFile(desPath);
        removeWatermark(new File(desPath));

        // 关闭文档
        originalPdf.clone();
        System.out.println("耗时:"+ (System.currentTimeMillis()-startTime));
    }

总结

不知道是不是aspose.pdf破解版的原因,速度是比较慢的,所以在这里我是选择spire.pdf

你可能感兴趣的:(java,pdf,word)