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();
    }

}    
相关推荐
winfredzhang13 小时前
Python 从零打造桌面文件管理工具开发全过程实录与源码深度解析
python·pdf·视频·图片·docx·xlsx
忧郁缭绕14 小时前
Spring Boot Pf4j模块化能力设计思考
java·spring boot·后端
Andy Dennis14 小时前
1panel阿里云部署
阿里云·docker·云计算·1panel
laozhao43214 小时前
阿里云213万中标兼容CUDA架构智能算力设备采购项目
阿里云·架构·云计算
iPadiPhone14 小时前
Spring Boot 核心注解全维度解析与面试复盘
java·spring boot·后端·spring·面试
彭于晏Yan14 小时前
Spring Cloud Stream使用
spring boot·后端·spring cloud
常利兵14 小时前
Kotlin 延迟初始化:lateinit与by lazy的华山论剑
spring boot·后端·状态模式
沙雕不是雕又菜又爱玩14 小时前
基于springboot的超市收银系统
java·spring boot·intellij-idea
l软件定制开发工作室14 小时前
Spring开发系列教程(32)——Spring Boot开发
java·spring boot·后端·spring
彭于晏Yan14 小时前
JsonProperty注解的access属性
java·spring boot