利用JFinal完成一次异步非阻塞PDF转Word的尝试

一、环境及工具:

    环境:Jfinal4.9

    工具:spire.pdf

spire.pdf maven坐标:

    

<dependency>
    <groupId> e-iceblue </groupId>
    <artifactId>spire.pdf</artifactId>
    <version>3.11.6</version>
</dependency>
<!-- PDF转换工具 仓库 -->
<repository>
    <id>com.e-iceblue</id>
    <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
<!-- PDF转换工具 仓库 -->


spire.pdf帮助文档链接

https://www.e-iceblue.cn/licensing/install-spirepdf-for-java-from-maven-repository.html

二、控制层


public class PdfToolsController extends Controller {

    @ActionKey("/pdf/testPdfToWord")
    public void testPdfToWord() throws InterruptedException {
        UploadFile file = getFile();
        String downLoadPath=PathKit.getWebRootPath()+"/download/change.docx";
        CompletableFuture<File> fileCompletableFuture = CompletableFuture.supplyAsync(() -> {
            Optional<File> target_file = PdfTask(file.getFile(),downLoadPath);
            return target_file.get();
        });
        mainTask();
        File download_file=null;
        try {
            download_file = fileCompletableFuture.get(100, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
        renderFile(download_file);
    }

    private void mainTask() throws InterruptedException {
        List<Record> records = Db.find(" select * from org_user");
        System.out.println(records);
        Thread.sleep(1000);
    }


    public Optional<File> PdfTask(File file, String target_name){
        FileInputStream fio = null;
        Optional<File> target_file=Optional.empty();
        try (FileInputStream fio=new  FileInputStream(file)){
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromStream(fio);
            pdf.saveToFile(target_name, FileFormat.DOCX);
            target_file=Optional.ofNullable(new File(target_name));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            return target_file;
        }
    }


}

三、路由配置

public void configRoute(Routes routes) {

    //配置路由
    routes.add(new AdminRoutes());
}
public class AdminRoutes extends Routes {
    @Override
    public void config() {
        setBaseViewPath("/admin");
        add("/", PdfToolsController.class,"");
    }
}



四、启动项目,并用PostMan测试接口。

t1.png

t2.png

至此,转换成功




评论区

steven_lhcb_9527

2020-12-14 08:45

word里面没有乱码,就是缩进有的地方还需要调

一路走来

2020-12-14 11:13

有没有页数限制,没有限制的话是不错的。

steven_lhcb_9527

2020-12-14 11:35

应该是可以,可以查一下api.

steven_lhcb_9527

2020-12-14 11:38

pdf的大小应该是有限制的,具体不知道。官方的API上我看也没讲,如果PDF很大的话,我觉得还是要处理下。ForkJoinPool的线程池大小可以设置稍微大一点

steven_lhcb_9527

2020-12-14 11:51

https://www.e-iceblue.cn/licensing/install-spirepdf-for-java-from-maven-repository.html