# docsdk-java
**Repository Path**: aityhere/docsdk-java
## Basic Information
- **Project Name**: docsdk-java
- **Description**: 这是 DocSDK Java 开发工具包。
DocSDK 是一个智能文件转换的工具包。我们支持各类文档的转换,其中包括 pdf、doc、docx、xls、xlsx、ppt、pptx、dwg、caj、svg、html、json、png、jpg 和 gif 等等各种格式的转换,更多转换格式可查看我们的新版首页(docsdk.com/home)。现有八大 SDK 的支持,其中包括 Java、Node.js、PHP、Python、Swift、CLI、AWS-Lambda 和 Laravel。
关键词: 文档转换,文件转换,PDF转Word,PDF转PPT,PDF转HTML,JavaSDK
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://docsdk.com/home
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2021-05-03
- **Last Updated**: 2021-08-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 关于 DocSDK
> DocSDK 是一个智能文件转换的工具包。我们支持各类文档的转换,其中包括 pdf、doc、docx、xls、xlsx、ppt、pptx、dwg、caj、svg、html、json、png、jpg 和 gif 等等各种格式的转换,更多转换格式可查看我们的[新版首页](http://www.docsdk.com/home) 。现有八大 SDK 的支持,其中包括 Java、Node.js、PHP、Python、Swift、CLI、AWS-Lambda 和 Laravel。
>
> **关键词: 文档转换,文件转换,PDF转Word,PDF转PPT,PDF转HTML,JavaSDK**
# docsdk-java
> 这是 [九云图 DocSDK](http://www.9yuntu.cn/v2/ApiDoc) _API v2_ 官方的 Java 开发工具包.
## 安装
添加以下依赖到 pom.xml:
```
com.docsdk
docsdk-java
1.0.3
```
## 创建 API Client
###### 配置
默认情况下, API Key, Sandbox 和 Webhook Signing Secret 是从 `application.properties` 文件读取的
```properties
DOCSDK_API_KEY=
DOCSDK_SANDBOX=
DOCSDK_WEBHOOK_SIGNING_SECRET=
```
可以使用环境变量,自定义属性文件,系统属性和字符串变量来提供上述配置。
对于所有选项,应使用 `DOCSDK_API_KEY`, `DOCSDK_SANDBOX` and `DOCSDK_WEBHOOK_SIGNING_SECRET` 变量名称。
###### 默认(同步) client
```java
// Using configuration from `application.properties` file
new DocSDKClient();
// Using configuration from environment variables
new DocSDKClient(new EnvironmentVariableSettingsProvider());
// Using configuration from custom properties file
new DocSDKClient(new PropertyFileSettingsProvider("custom.properties"));
// Using configuration from string variables
new DocSDKClient(new StringSettingsProvider("api-url", "webhook-signing-secret", false));
// Using configuration from system properties
new DocSDKClient(new SystemPropertySettingsProvider());
```
###### 异步 client
```java
// Using configuration from `application.properties` file
new AsyncDocSDKClient();
// Using configuration from environment variables
new AsyncDocSDKClient(new EnvironmentVariableSettingsProvider());
// Using configuration from custom properties file
new AsyncDocSDKClient(new PropertyFileSettingsProvider("custom.properties"));
// Using configuration from string variables
new AsyncDocSDKClient(new StringSettingsProvider("api-url", "webhook-signing-secret", false));
// Using configuration from system properties
new AsyncDocSDKClient(new SystemPropertySettingsProvider());
```
## 创建 Jobs
###### 默认(同步) client
```java
// Create a client
final DocSDKClient docSDKClient = new DocSDKClient();
// Create a job
final JobResponse createJobResponse = docSDKClient.jobs().create(
ImmutableMap.of(
"import-my-file", new UrlImportRequest().setUrl("import-url"),
"convert-my-file", new ConvertFilesTaskRequest()
.setInput("import-my-file")
.set("width", 100)
.set("height", 100),
"export-my-file", new UrlExportRequest().setInput("convert-my-file")
)
).getBody();
// Get a job id
final String jobId = createJobResponse.getId();
// Wait for a job completion
final JobResponse waitJobResponse = docSDKClient.jobs().wait(jobId).getBody();
// Get an export/url task id
final String exportUrlTaskId = waitJobResponse.getTasks().stream().filter(taskResponse -> taskResponse.getName().equals("export-my-file")).findFirst().get().getId();
```
###### 异步 client
```java
// Create a client
final AsyncDocSDKClient asyncDocSDKClient = new AsyncDocSDKClient();
// Create a job
final JobResponse createJobResponse = asyncDocSDKClient.jobs().create(
ImmutableMap.of(
"import-my-file", new UrlImportRequest().setUrl("import-url"),
"convert-my-file", new ConvertFilesTaskRequest()
.setInput("import-my-file")
.set("width", 100)
.set("height", 100),
"export-my-file", new UrlExportRequest().setInput("convert-my-file")
)
).get().getBody();
// Get a job id
final String jobId = createJobResponse.getId();
// Wait for a job completion
final JobResponse waitJobResponse = asyncDocSDKClient.jobs().wait(jobId).get().getBody();
// Get an export/url task id
final String exportUrlTaskId = waitJobResponse.getTasks().stream().filter(taskResponse -> taskResponse.getName().equals("export-my-file")).findFirst().get().getId();
```
## 下载文件
DocSDK 可以使用 `export/url` 生成公开的链接,您可以使用这些URL下载输出文件。
###### 默认(同步) client
```java
// Wait for an export/url task to be finished
final TaskResponse waitUrlExportTaskResponse = docSDKClient.tasks().wait(exportUrlTaskId).getBody();
// Get url and filename of export/url task
final String exportUrl = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url");
final String filename = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("filename");
// Get file as input stream using url of export/url task
final InputStream inputStream = docSDKClient.files().download(exportUrl).getBody();
// Save to local file
OutputStream outputStream = new FileOutputStream(new File(filename));
IOUtils.copy(inputStream, outputStream);
```
###### 异步 client
```java
// Wait for an export/url task to be finished
final TaskResponse waitUrlExportTaskResponse = asyncDocSDKClient.tasks().wait(exportUrlTaskId).get().getBody();
// Get a url of export/url task
final String exportUrl = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("url");
final String filename = waitUrlExportTaskResponse.getResult().getFiles().get(0).get("filename");
// Get file as input stream using url of export/url task
final InputStream inputStream = asyncDocSDKClient.files().download(exportUrl).get().getBody();
// Save to local file
OutputStream outputStream = new FileOutputStream(new File(filename));
IOUtils.copy(inputStream, outputStream);
```
## 上传文件
通过 `import/upload` 上传文件 (请参考 [docs](http://www.9yuntu.cn/v2/ApiDoc)).
这是一种简单的上传方法:
###### 默认(同步) client
```java
// Create a client
final DocSDKClient docSDKClient = new DocSDKClient();
// File as input stream
final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("file.jpg");
// Upload file using import/upload task
final TaskResponse uploadImportTaskResponse = docSDKClient.importUsing().upload(new UploadImportRequest(), inputStream).getBody();
// Wait for import/upload task to be finished
final TaskResponse waitUploadImportTaskResponse = docSDKClient.tasks().wait(uploadImportTaskResponse.getId()).getBody();
```
###### 异步 client
```java
// Create a client
final AsyncDocSDKClient asyncDocSDKClient = new DocSDKClient();
// File as input stream
final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("file.jpg");
// Upload file using import/upload task
final TaskResponse uploadImportTaskResponse = asyncDocSDKClient.importUsing().upload(new UploadImportRequest(), inputStream).get().getBody();
// Wait for import/upload task to be finished
final TaskResponse waitUploadImportTaskResponse = asyncDocSDKClient.tasks().wait(uploadImportTaskResponse.getId()).get().getBody();
```
## 签署 Webhook
可以验证从 DocSDK 收到的 Webhook 请求。
```java
// Create a client
final DocSDKClient docSDKClient = new DocSDKClient();
// The JSON payload from the raw request body.
final String payload = "payload";
// The value of the "DocSDK-Signature" header.
final String signature = "signature";
// Returns true if signature is valid, and false if signature is invalid
final boolean isValid = docSDKClient.webhooks().verify(payload, signature);
```
## 单元测试
```
$ mvn clean install -U -Punit-tests
```
## 集成测试
```
$ mvn clean install -U -Pintegration-tests
```
默认情况下,这会使用官方 DocSDK 帐户针对 Sandbox API 运行集成测试。 如果您想使用自己的帐户,则可以在 `application.properties` 文件中设置API密钥。
在这种情况下,您需要将以下用于 Sandbox API 的 MD5 hash 值添加到白名单(使用 DocSDK 仪表板)。
07db6477193bf8313e8082a1e1b5eaf6 image-test-file-1.jpg
7ef166ecc65949f6f2e7eb94a3dac0d4 image-test-file-2.jpg
ccbb000ef5bd9dad0fab600d2fff02fb odt-test-file-1.odt
3a3b4d07338b51db19056a73a89a186b odt-test-file-2.odt
## 其他参考
* [API v2 文档](http://www.9yuntu.cn/v2/ApiDoc)
* [DocSDK 主页](https://www.docsdk.com/home)