PDF转OFD ~java实现

news2025/8/11 12:17:28

PDF转OFD ~java实现

上篇文章记录了一下我第一次对接“超阅云”实现了ofd转pdf功能,想了想,还是再写一篇pdf转ofd的实现,其实对接的API基本一样,如果你是第一次看,建议先看看上一篇文章-“ofd转pdf”

————————————————

准备工作

  1. 登录注册超阅云开发者账号,可直接微信扫码登录注册,一键搞定

  2. 进入个人中心,获取API开放秘钥

开始开发

1、接口概述
(1)采用HTTP接口模式,编码UTF-8
(2)接口地址: https://surread.esign.cn
(3)接口请求前必须先申请成为开发者,并获取accessKey和secretKey
(4)接口请求头需要带上鉴权参数Authorization ,详情见“鉴权方式"

2、鉴权方式
(1)鉴权规则
第一步:参数签名signature
MD5(post + url + 请求时间戳 + 请求随机串 + MD5(ak+sk))
第二步:base64加密 Authorization
base64(method=post,url=xxx,timestamp=xxx,nonce_str=xxx,ak=%s,signature=xxx)
第三步: 将生成的Authorization作为参数放到请求头中
(2)代码示例

import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.digest.DigestAlgorithm;
import cn.hutool.crypto.digest.Digester;

public class AuthorizationUtil {

    public static void main(String[] args) {

        String ak = "开发者标识";
        String sk = "开发者秘钥";
        // 生成
        String requestMethod = "post".toUpperCase();
        String url = "/api/developer/convert/pdf2ofd";
        Long timestamp = System.currentTimeMillis();
        String randomStr = RandomUtil.randomString(20);
        String authorization = generateAuthorization(requestMethod,url,timestamp,randomStr,ak,sk);
        System.out.println("生成:"+authorization);
    }

    public static String generateAuthorization(String requestMethod, String url, Long timestamp, String randomStr, String ak, String sk){
        Digester md5 = new Digester(DigestAlgorithm.MD5);
        // signature = MD5(requestMethod + url + 请求时间戳 + 请求随机串 + MD5(ak+sk))
        String signature = md5.digestHex(requestMethod+url+timestamp+randomStr+md5.digestHex(ak+sk));
        //   Authorization = base64(method=xxx,url=xxx,timestamp=xxx,nonce_str=xxx,ak=xxx,signature=xxx)
        return Base64.encode(String.format("method=%s,url=%s,timestamp=%s,nonce_str=%s,ak=%s,signature=%s",requestMethod,url,timestamp,randomStr,ak,signature));
    }
}

(2)一些踩坑:
鉴权方式其实就是base64+Md5的结合,这里我引了一个hutool工具包,挺好用的,大家也可以试试
鉴权参数主要是不同的接口url参数对应的就是接口的url

API测试POST

postman调用测试

curl --location --request POST 'https://surread.esign.cn/api/developer/convert/pdf2ofd' \
--header 'Authorization: bWV0aG9kPVBPU1QsdXJsPS9hcGkvZGV2ZWxvcGVyL2NvbnZlcnQvb2ZkMnBkZix0aW1lc3RhbXA9MTY2ODQ5Mjg1NTI3Nyxub25jZV9zdHI9cnZsaXY1emY0bjByOWdqeGx6dW4sYWs9b3NlZjA2NGtjdnA1MzJ6a2k1dnYyaTJicGwzOHJyam4sc2lnbmF0dXJlPTAwZWRlOTY4YzNhMmM0MGY1ZTcwXXXXXXXXXX' \
--form 'file=@"/C:/Users/DESKTOP-J21/Documents/pdf/PFD小文档.pdf"'

在这里插入图片描述

!!!注意: 同样再调用下载/预览文件的API接口去获取或者预览转换后的文档
获取文档下载地址: /api/developer/convert/getDownUrlByFileKey
获取文档预览地址: /api/developer/convert/getPreviewUrlByFileKey
详细接口文档可以参考“超阅云”官网的文档介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web前端——用CSS的常用样式制作一个炫酷的按钮

文章目录笔记:CSS的常用样式炫酷按钮效果实现笔记:CSS的常用样式 边框以及弧度样式 border-width:边框的线条宽度。 border-style:边框的样式,例如 solid实现 dotted 点线 dashed 虚线… border-color:边框…

Docker -- 01实践:使用Docker 快速安装Jenkins

使用Docker 快速安装Jenkins1. Docker install2. Jenkins install3. User Guide1.1 Big Data -- Postgres3. User Guide1.1 Big Data -- PostgresJenkins Website: https://www.jenkins.io/. 1. Docker install Docker 安装和基础知识 Docker install: https://blog.csdn.net/w…

TS学习笔记 类型标签 联合类型 枚举类型 泛型 类型别名

个人理解总结: js天生没有编译和类型检查的束缚 灵活好上手 结合项目使用时也可以做到热更新提升开发体验。 (需要编译的JAVA以前开发DEBUG很麻烦但现在有了容器编排技术,也可以实现类似效果) TS是JS的超集,添加了类型标注,不能直…

vulnhub靶机corrosion1

靶机下载地址:Corrosion: 1 ~ VulnHub Kail IP:192.168.174.128 Corrosion ip:192.168.174.133 思路: 靶机端口扫描,ssh日志反弹shell,linpeas脚本扫描,备份文件发现密码,爆破zi…

医疗器械设计时需要注意的事项

伴随着医疗器械的增加,经市场评估的医疗器械产品也趋向多样化,医疗器械设计也非常重要,下面小编就带大家了解一下开展医疗器械设计时需要注意什么? 说到医疗器械,相信大家都很熟悉。医疗器械有很多种,包括一类医疗器械…

【C++位图】1. 快速查找某个数据是否在一个集合中 2. 排序(全部插入,遍历一遍) 3. 求两个集合的交集、并集等

目录 问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 2.简单实现一个位图 3.如何利用位图求两个集合的交集、并集 问题:给40亿个不重复的无符号整数,没排过序…

Golang入门笔记(14)—— 错误处理

来一个除以0的异常,代码如下: package mainimport "fmt"func main() {fmt.Println("before")divNum()fmt.Println("after") }func divNum() {num1 : 10num2 : 0result : num1 / num2fmt.Println(result) } console 异常&…

GitHub 昙花一现:《Spring Boot 趣味实战》神作开源几分钟被下架

又来给大家分享好书了:刘水镜老师的 Spring Boot 趣味实战,网上依旧是没有开源版本!文末送上 刘水镜是谁? 十余年持续技术文章输出,CSDN 博客专家。2020 年《 Spring Boot 趣味私房课》专栏上线,凭借风趣…

创新案例|巴黎欧莱雅如何以内容+货架双轮驱动全渠道兴趣电商增长飞轮

对巴黎欧莱雅而言,兴趣电商作为内容场景为核心的平台,但货架场景已成为驱动增长的飞轮。巴黎欧莱雅团队注意到,抖音用户不只是被动地接受信息流推送,而是越来越倾向于主动搜索。消费者行为的重大变革意味着消费者不再满足于货找人…

【MFC】初识MFC(8)

MFC简介 微软提供的一个类库(Class Libraries),封装了Windows的API,并且包含一个应用程序框架。 1、MFC是对前面窗口编程所用到的API进行封装,在Windows C基础上引入了C面向对象的思想,简单而言就是把API…

【论文翻译】2.5PC:一个更快的非阻塞原子提交协议

2.5-PC: A Faster and Non-Blocking Atomic Commit Protocol 目录1 介绍2 相关工作3 原子承诺和 3PC 概述4 为什么 3PC 是非阻塞的?5 2.5 PC6 2.5 PC 的非正式证明7 确认信息8 2.5 PC 机器证明参考摘要:我们提出 2.5PC,一种非阻塞原子提交协…

DNS与网站访问流程

1:dns与网址url简介 DNS是域名系统(DomainNameSystem)的缩写,域名系统是一中庞大而复杂的系统,但我们这里讲解重心并不是这个系统,而是指本地电脑dns是什么 讲到dns,我们就不得不讲讲网址和域名,我们经常会…

linux杀死进程的五种方法(kill)

添加链接描述 相关博主的链接; 方法一:通过kill 进程id的方式可以实现 首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id: 然后通过 kill 3781 就可以关闭进程了. 补充: kill -9 来强制终止退出, 例…

16.一篇文章学会django模型的使用

1.django模型简单示例 1.1 创建django项目 创建完项目,还需要创建django子项目 django-admin startproject model_study cd .\model_study\ python manage.py startapp model_app1.2配置应用 将模型对应的应用程序(刚刚创建的子应用)添加…

CentOS 7 Jenkins配置及SpringBoot项目自动部署

1.下载Jenkins 下载地址:War Jenkins Packages 运行Jenkins之前确保系统已经安装好JDK,因为我安装的是JDK1.8,所以选择2.346.1 这个版本 2.启动jenkins 将下载好的jenkins.war上传到服务器上,我的目录是/home/jenkins 启动命令 java -jar jenkins.war --httpPo…

万字详文:TCP 拥塞控制详解

本文主要介绍 TCP 拥塞控制算法,内容多来自网上各个大佬的博客及《TCP/IP 详解》一书,在此基础上进行梳理总结,与大家分享。因水平有限,内容多有不足之处, 敬请谅解。一、TCP 首部格式 在了解 TCP 的拥塞控制之前&…

多向思考者--高敏感人群的内心世界

工作以后很少看心理学的书,因为心理学书给我的印象是:国外翻译的很啰嗦,国内的太鸡汤,看的时候能有感触,看完以后就都忘记了。阅读心理学的书籍,更多的是跟着书中的内容和自己对话。看完《多向思考者》这本…

SpringMVC使用(二)

1. 统一异常处理 SpringMVC提供了统一处理Controller层抛出的异常的方法 1.1 统一异常处理案例 RestController的统一异常处理 package com.lan.controller;import com.lan.exception.BusinessException; import com.lan.exception.SystemException; import org.springfram…

DolphinDB Kafka 插件介绍

1. DolphinDB Kafka 插件介绍 DolphinDB Kafka 插件支持把 DolphinDB 中生产的数据推送到 Kafka,也支持从 Kafka 订阅数据,并在 DolphinDB 中消费。用户可以在 DolphinDB 中实例化 Producer 对象,把 DolphinDB 中的数据同步到 Kafka 中指定的…

LeetCode | 218. 天际线问题

城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回由这些建筑物形成的天际线 。 每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] [lefti, righti, heighti] 表示:…