SpringBoot集成阿里云文档格式转换实现pdf转换word,excel

一、前置条件

1.1 创建accessKey

如何申请:https://help.aliyun.com/zh/ram/user-guide/create-an-accesskey-pair

1.2 开通服务

官方地址:https://docmind.console.aliyun.com/doc-overview

未开通服务时需要点击开通按钮,然后才能调用相关api。

二、代码实现

2.1 引入依赖

xml 复制代码
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-openapi</artifactId>
    <version>0.2.5</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>docmind_api20220711</artifactId>
    <version>2.0.3</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.50</version>
</dependency>

2.2 pdf转换word

官方文档:https://help.aliyun.com/zh/document-mind/developer-reference/convertpdftoword

java 复制代码
package net.lab1024.sa.admin.util;

import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;
import com.aliyun.teautil.models.RuntimeOptions;

import java.io.FileInputStream;
import java.util.List;

public class PdfConvertUtil {

    private static final String OK = "200";

    private static final String ACCESS_KEY_ID = "xxx";

    private static final String ACCESS_KEY_SECRET = "xxx";

    public static void main(String[] args) throws Exception {
        String id = submitPdfToWord("C:\\Users\\admin\\Desktop\\example.pdf");

        // 10秒后再查询结果,等阿里云处理一会儿
        Thread.sleep(10000);

        List<GetDocumentConvertResultResponseBody.GetDocumentConvertResultResponseBodyData> data = queryPdfToWord(id);
    }

    /**
     * 客户端
     *
     * @return
     * @throws Exception
     */
    private static Client getClient() throws Exception {
        Config config = new Config();
        config.setAccessKeyId(ACCESS_KEY_ID);
        config.setAccessKeySecret(ACCESS_KEY_SECRET);
        // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
        config.setEndpoint("docmind-api.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }

    /**
     * 提交pdf转换word转换任务
     *
     * @return
     * @throws Exception
     */
    public static String submitPdfToWord(String filePath) throws Exception {
        Client client = getClient();

        // 请求参数
        SubmitConvertPdfToWordJobAdvanceRequest advanceRequest = new SubmitConvertPdfToWordJobAdvanceRequest();
        advanceRequest.setFileUrlObject(new FileInputStream(filePath));
        advanceRequest.setFileName("example.pdf");

        // 运行参数
        RuntimeOptions runtime = new RuntimeOptions();


        // 发送请求
        SubmitConvertPdfToWordJobResponse response = client.submitConvertPdfToWordJobAdvance(advanceRequest, runtime);

        // 处理结果
        SubmitConvertPdfToWordJobResponseBody body = response.getBody();
        if (!OK.equals(body.getCode())) {
            throw new RuntimeException("pdf转换word任务提交失败");
        }
        return body.getData().getId();
    }

    /**
     * 查询pdf转换word转换任务
     *
     * @param id
     * @return
     * @throws Exception
     */
    public static List<GetDocumentConvertResultResponseBody.GetDocumentConvertResultResponseBodyData> queryPdfToWord(String id) throws Exception {
        Client client = getClient();

        // 请求参数
        GetDocumentConvertResultRequest resultRequest = new GetDocumentConvertResultRequest();
        resultRequest.setId(id);

        // todo 这里是简单处理 需要轮询120分钟,10秒一次

        GetDocumentConvertResultResponse response = client.getDocumentConvertResult(resultRequest);
        GetDocumentConvertResultResponseBody body = response.getBody();
        if (!OK.equals(body.getCode())) {
            throw new RuntimeException("pdf转换word任务查询失败");
        }

        Boolean completed = body.getCompleted();
        if (!completed) {
            throw new RuntimeException("pdf转换word任务未完成");
        }

        String status = body.getStatus();
        if (!"Success".equals(status)) {
            throw new RuntimeException("pdf转换word任务转换失败");
        }
        return body.getData();
    }

}

2.3 pdf转换excel

官方文档:https://help.aliyun.com/zh/document-mind/developer-reference/convertpdftoexcel

java 复制代码
package net.lab1024.sa.admin.util;

import com.aliyun.docmind_api20220711.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.docmind_api20220711.Client;
import com.aliyun.teautil.models.RuntimeOptions;

import java.io.FileInputStream;
import java.util.List;

public class PdfConvertUtil {

    private static final String OK = "200";

    private static final String ACCESS_KEY_ID = "xxx";

    private static final String ACCESS_KEY_SECRET = "xxx";

    public static void main(String[] args) throws Exception {
        String id = submitPdfToExcel("C:\\Users\\admin\\Desktop\\example.pdf");

        // 10秒后再查询结果,等阿里云处理一会儿
        Thread.sleep(10000);

        List<GetDocumentConvertResultResponseBody.GetDocumentConvertResultResponseBodyData> data = queryPdfToExcel(id);
    }

    /**
     * 客户端
     *
     * @return
     * @throws Exception
     */
    private static Client getClient() throws Exception {
        Config config = new Config();
        config.setAccessKeyId(ACCESS_KEY_ID);
        config.setAccessKeySecret(ACCESS_KEY_SECRET);
        // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com
        config.setEndpoint("docmind-api.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }

    /**
     * 提交pdf转换excel转换任务
     * @return
     * @throws Exception
     */
    public static String submitPdfToExcel(String filePath) throws Exception {
        Client client = getClient();

        // 请求参数
        SubmitConvertPdfToExcelJobAdvanceRequest advanceRequest = new SubmitConvertPdfToExcelJobAdvanceRequest();
        advanceRequest.setFileUrlObject(new FileInputStream(filePath));
        advanceRequest.setFileName("example.pdf");
        // 合并为1个sheet
        advanceRequest.setForceMergeExcel(true);

        // 运行参数
        RuntimeOptions runtime = new RuntimeOptions();

        // 发送请求
        SubmitConvertPdfToExcelJobResponse response = client.submitConvertPdfToExcelJobAdvance(advanceRequest, runtime);

        // 处理结果
        SubmitConvertPdfToExcelJobResponseBody body = response.getBody();
        if (!OK.equals(body.getCode())) {
            throw new RuntimeException("pdf转换excel任务提交失败");
        }
        return body.getData().getId();
    }

    /**
     * 查询pdf转换excel转换任务
     * @param id
     * @return
     * @throws Exception
     */
    public static List<GetDocumentConvertResultResponseBody.GetDocumentConvertResultResponseBodyData> queryPdfToExcel(String id) throws Exception {
        Client client = getClient();

        // 请求参数
        GetDocumentConvertResultRequest resultRequest = new GetDocumentConvertResultRequest();
        resultRequest.setId(id);

        // todo 这里是简单处理 需要轮询120分钟,10秒一次

        GetDocumentConvertResultResponse response = client.getDocumentConvertResult(resultRequest);
        GetDocumentConvertResultResponseBody body = response.getBody();
        if (!OK.equals(body.getCode())) {
            throw new RuntimeException("pdf转换excel任务查询失败");
        }

        Boolean completed = body.getCompleted();
        if (!completed) {
            throw new RuntimeException("pdf转换excel任务未完成");
        }

        String status = body.getStatus();
        if (!"Success".equals(status)) {
            throw new RuntimeException("pdf转换excel任务转换失败");
        }
        return body.getData();
    }

}    
相关推荐
humors2217 小时前
pdf工具分享
pdf·工具·程序·网站·转换·处理
JH30739 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
qq_124987075312 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_12 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
2301_8187320612 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
新缸中之脑13 小时前
用MonkeyOCR解析复杂PDF
pdf
汤姆yu16 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶16 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
biyezuopinvip17 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide17 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot