Skip to content

Commit 56edbb5

Browse files
committed
Merge branch 'release/1.4'
2 parents e7ef6f8 + 33a1b9a commit 56edbb5

14 files changed

+140
-59
lines changed

README.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ Example to convert DOCX file to PDF. All supported formats and options can be fo
3030
[here](https://www.convertapi.com).
3131

3232
```java
33-
CompletableFuture<ConversionResult> result = ConvertApi.convert("docx", "pdf", new Param[]{
34-
new Param("file", Paths.get("test.docx"))
35-
});
33+
CompletableFuture<ConversionResult> result = ConvertApi.convert("docx", "pdf", new Param("file", Paths.get("test.docx")));
3634

3735
// save to file
3836
result.get().saveFile(Paths.get("my_file.pdf")).get();
@@ -54,9 +52,9 @@ Integer cost = result.get().conversionCost();
5452
#### Convert file url
5553

5654
```java
57-
CompletableFuture<ConversionResult> result = ConvertApi.convert("pptx", "pdf", new Param[]{
55+
CompletableFuture<ConversionResult> result = ConvertApi.convert("pptx", "pdf",
5856
new Param("file", "https://cdn.convertapi.com/cara/testfiles/presentation.pptx")
59-
});
57+
);
6058
```
6159

6260
#### Additional conversion parameters
@@ -65,12 +63,12 @@ ConvertAPI accepts extra conversion parameters depending on converted formats. A
6563
parameters and explanations can be found [here](https://www.convertapi.com).
6664

6765
```java
68-
CompletableFuture<ConversionResult> result = ConvertApi.convert("pdf", "jpg", new Param[]{
66+
CompletableFuture<ConversionResult> result = ConvertApi.convert("pdf", "jpg",
6967
new Param("file", Paths.get("test.pdf")),
7068
new Param("scaleimage", "true"),
7169
new Param("scaleproportions", "true"),
7270
new Param("imageheight", 300)
73-
});
71+
);
7472
```
7573

7674
### User information

src/com/convertapi/ConversionResult.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public Integer conversionCost() {
3737
}
3838

3939
public ConversionResultFile getFile(int index) {
40+
if (index < 0) index = response.Files.length + index;
4041
return new ConversionResultFile(response.Files[index]);
4142
}
4243

src/com/convertapi/ConvertApi.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
import java.io.IOException;
1212
import java.nio.file.Path;
1313
import java.nio.file.Paths;
14+
import java.util.ArrayList;
1415
import java.util.Arrays;
16+
import java.util.HashMap;
1517
import java.util.List;
1618
import java.util.concurrent.CompletableFuture;
1719
import java.util.concurrent.ExecutionException;
@@ -22,7 +24,7 @@ public class ConvertApi {
2224
private static final List<String> IGNORE_PARAMS = Arrays.asList( "storefile", "async", "jobid", "timeout");
2325

2426
@SuppressWarnings("unused")
25-
public static CompletableFuture<ConversionResult> convert(String fromFormat, String toFormat, Param[] params) {
27+
public static CompletableFuture<ConversionResult> convert(String fromFormat, String toFormat, Param... params) {
2628
return convert(fromFormat, toFormat, params, Config.defaults());
2729
}
2830

@@ -38,18 +40,17 @@ public static CompletableFuture<ConversionResult> convert(String fromFormat, Str
3840
.build();
3941

4042
MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
41-
for (Param param: params) {
42-
if (!IGNORE_PARAMS.contains(param.getName())) {
43-
try {
44-
if (param.getValue().size() == 1) {
45-
multipartBuilder.addFormDataPart(param.getName(), param.getValue().get(0));
46-
} else {
47-
for (int i = 0; i < param.getValue().size(); i++) {
48-
multipartBuilder.addFormDataPart(param.getName() + "[" + i + "]", param.getValue().get(i));
49-
}
43+
HashMap<String, List<String>> paramValues = getParamValues(params);
44+
45+
for (String name : paramValues.keySet()) {
46+
if (!IGNORE_PARAMS.contains(name)) {
47+
List<String> values = paramValues.get(name);
48+
if (paramValues.get(name).size() == 1) {
49+
multipartBuilder.addFormDataPart(name, values.get(0));
50+
} else {
51+
for (int i = 0; i < values.size(); i++) {
52+
multipartBuilder.addFormDataPart(name + "[" + i + "]", values.get(i));
5053
}
51-
} catch (ExecutionException | InterruptedException e) {
52-
throw new RuntimeException(e);
5354
}
5455
}
5556
}
@@ -133,4 +134,19 @@ private static String getFileExtension(Path path) {
133134
String name = path.getFileName().toString();
134135
return name.substring(name.lastIndexOf(".") + 1);
135136
}
137+
138+
private static HashMap<String, List<String>> getParamValues(Param[] params) {
139+
HashMap<String, List<String>> result = new HashMap<>();
140+
141+
try {
142+
for (Param param : params) {
143+
List<String> values = result.computeIfAbsent(param.getName(), (v) -> new ArrayList<>());
144+
values.addAll(param.getValue());
145+
}
146+
} catch (InterruptedException | ExecutionException e) {
147+
throw new RuntimeException(e);
148+
}
149+
150+
return result;
151+
}
136152
}

src/com/convertapi/Http.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static CompletableFuture<Void> requestDelete(String url) {
5959
}
6060

6161
static Request.Builder getRequestBuilder() {
62-
return new Request.Builder()
63-
.header("User-Agent", "convertapi-java");
62+
String agent = String.format("ConvertAPI-Java/%.1f (%s)", 1.4, System.getProperty("os.name"));
63+
return new Request.Builder().header("User-Agent", agent);
6464
}
6565
}

src/com/convertapi/Param.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.nio.file.Files;
1111
import java.nio.file.Path;
1212
import java.util.ArrayList;
13+
import java.util.Arrays;
1314
import java.util.List;
1415
import java.util.concurrent.CompletableFuture;
1516
import java.util.concurrent.ExecutionException;
@@ -83,6 +84,12 @@ public Param(String name, ConversionResult value, int fileIndex) {
8384
this.value = CompletableFuture.completedFuture(valueList);
8485
}
8586

87+
@SuppressWarnings("WeakerAccess")
88+
public Param(String name, CompletableFuture<ConversionResult> value, int fileIndex) {
89+
this(name);
90+
this.value = value.thenApply((res) -> Arrays.asList(res.getFile(fileIndex).getUrl()));
91+
}
92+
8693
@SuppressWarnings("unused")
8794
public Param(String name, CompletableFuture<ConversionResult> value) {
8895
this(name);

src/com/convertapi/examples/Advanced.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
package com.convertapi.examples;
22

3+
import com.convertapi.Config;
4+
import com.convertapi.ConversionResult;
5+
import com.convertapi.ConvertApi;
6+
import com.convertapi.Param;
7+
38
import java.io.IOException;
9+
import java.net.InetSocketAddress;
10+
import java.net.Proxy;
411
import java.nio.file.Path;
512
import java.nio.file.Paths;
613
import java.util.concurrent.CompletableFuture;
714
import java.util.concurrent.ExecutionException;
815
import java.util.concurrent.TimeUnit;
916

10-
import com.convertapi.Config;
11-
import com.convertapi.ConversionResult;
12-
import com.convertapi.ConvertApi;
13-
import com.convertapi.Param;
17+
import static java.lang.System.getenv;
1418

1519
/**
1620
* Example of HTTP client setup to use HTTP proxy server.
1721
*/
1822

1923
public class Advanced {
2024
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
21-
Config.setDefaultSecret("YOUR API SECRET"); //Get your secret at https://www.convertapi.com/a
25+
Config.setDefaultSecret(getenv("CONVERTAPI_SECRET")); //Get your secret at https://www.convertapi.com/a
2226

2327
// Advanced HTTP client setup
2428
Config.setDefaultHttpBuilder(builder -> {
@@ -31,7 +35,7 @@ public static void main(String[] args) throws IOException, ExecutionException, I
3135
// Conversion
3236
Param fileParam = new Param("file", "https://cdn.convertapi.com/cara/testfiles/presentation.pptx");
3337
System.out.println("Converting remote PPTX to PDF");
34-
CompletableFuture<ConversionResult> result = ConvertApi.convert("pptx", "pdf", new Param[]{fileParam});
38+
CompletableFuture<ConversionResult> result = ConvertApi.convert("pptx", "pdf", fileParam);
3539
Path pdfFile = Paths.get(System.getProperty("java.io.tmpdir") + "/myfile.pdf");
3640
result.get().saveFile(pdfFile).get();
3741

src/com/convertapi/examples/ConversionChaining.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package com.convertapi.examples;
22

3+
import com.convertapi.Config;
4+
import com.convertapi.ConversionResult;
5+
import com.convertapi.ConvertApi;
6+
import com.convertapi.Param;
7+
38
import java.io.IOException;
49
import java.nio.file.Path;
510
import java.nio.file.Paths;
611
import java.util.concurrent.CompletableFuture;
712
import java.util.concurrent.ExecutionException;
8-
import com.convertapi.Config;
9-
import com.convertapi.ConversionResult;
10-
import com.convertapi.ConvertApi;
11-
import com.convertapi.Param;
13+
14+
import static java.lang.System.getenv;
1215

1316
/**
1417
* Short example of conversions chaining, the PDF pages extracted and saved as separated JPGs and then ZIP'ed
@@ -17,13 +20,13 @@
1720

1821
public class ConversionChaining {
1922
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
20-
Config.setDefaultSecret("YOUR API SECRET"); //Get your secret at https://www.convertapi.com/a
23+
Config.setDefaultSecret(getenv("CONVERTAPI_SECRET")); //Get your secret at https://www.convertapi.com/a
2124

2225
System.out.println("Converting PDF to JPG and compressing result files with ZIP");
23-
CompletableFuture<ConversionResult> jpgResult = ConvertApi.convert("docx", "jpg", new Param[]{new Param("file", Paths.get("test-files/test.docx"))});
26+
CompletableFuture<ConversionResult> jpgResult = ConvertApi.convert("docx", "jpg", new Param("file", Paths.get("test-files/test.docx")));
2427
System.out.println("ConvertApi.convert is not blocking method, proceeding to ZIP conversion");
2528

26-
CompletableFuture<ConversionResult> zipResult = ConvertApi.convert("jpg", "zip", new Param[]{new Param("files", jpgResult)});
29+
CompletableFuture<ConversionResult> zipResult = ConvertApi.convert("jpg", "zip", new Param("files", jpgResult));
2730

2831
System.out.println("Saving result file (blocking operation)");
2932
Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"));

src/com/convertapi/examples/ConvertRemoteFile.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
package com.convertapi.examples;
22

3+
import com.convertapi.Config;
4+
import com.convertapi.ConversionResult;
5+
import com.convertapi.ConvertApi;
6+
import com.convertapi.Param;
7+
38
import java.io.IOException;
49
import java.nio.file.Path;
510
import java.nio.file.Paths;
611
import java.util.concurrent.CompletableFuture;
712
import java.util.concurrent.ExecutionException;
8-
import com.convertapi.Config;
9-
import com.convertapi.ConversionResult;
10-
import com.convertapi.ConvertApi;
11-
import com.convertapi.Param;
13+
14+
import static java.lang.System.getenv;
1215

1316
/**
1417
* Example of conversion remote file. Converting file must be accessible from the internet.
1518
*/
1619

1720
public class ConvertRemoteFile {
1821
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
19-
Config.setDefaultSecret("YOUR API SECRET"); //Get your secret at https://www.convertapi.com/a
20-
21-
Param fileParam = new Param("file", "https://cdn.convertapi.com/cara/testfiles/presentation.pptx");
22+
Config.setDefaultSecret(getenv("CONVERTAPI_SECRET")); //Get your secret at https://www.convertapi.com/a
2223

2324
System.out.println("Converting remote PPTX to PDF");
24-
CompletableFuture<ConversionResult> result = ConvertApi.convert("pptx", "pdf", new Param[]{fileParam});
25+
CompletableFuture<ConversionResult> result = ConvertApi.convert("pptx", "pdf",
26+
new Param("file", "https://cdn.convertapi.com/cara/testfiles/presentation.pptx")
27+
);
2528

2629
Path pdfFile = Paths.get(System.getProperty("java.io.tmpdir") + "/myfile.pdf");
2730
result.get().saveFile(pdfFile).get();

src/com/convertapi/examples/ConvertWebToPdf.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package com.convertapi.examples;
22

3+
import com.convertapi.Config;
4+
import com.convertapi.ConversionResult;
5+
import com.convertapi.ConvertApi;
6+
import com.convertapi.Param;
7+
38
import java.io.IOException;
49
import java.nio.file.Path;
510
import java.nio.file.Paths;
611
import java.util.concurrent.CompletableFuture;
712
import java.util.concurrent.ExecutionException;
8-
import com.convertapi.Config;
9-
import com.convertapi.ConversionResult;
10-
import com.convertapi.ConvertApi;
11-
import com.convertapi.Param;
13+
14+
import static java.lang.System.getenv;
1215

1316
/**
1417
* Example of converting Web Page URL to PDF file
@@ -17,13 +20,13 @@
1720

1821
public class ConvertWebToPdf {
1922
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
20-
Config.setDefaultSecret("YOUR API SECRET"); //Get your secret at https://www.convertapi.com/a
23+
Config.setDefaultSecret(getenv("CONVERTAPI_SECRET")); //Get your secret at https://www.convertapi.com/a
2124

2225
System.out.println("Converting WEB to PDF");
23-
CompletableFuture<ConversionResult> result = ConvertApi.convert("web", "pdf", new Param[]{
26+
CompletableFuture<ConversionResult> result = ConvertApi.convert("web", "pdf",
2427
new Param("url", "https://en.wikipedia.org/wiki/Data_conversion"),
2528
new Param("filename", "web-example")
26-
});
29+
);
2730

2831
Path tmpDir = Paths.get(System.getProperty("java.io.tmpdir"));
2932
CompletableFuture<Path> pdfFile = result.get().saveFile(tmpDir);

src/com/convertapi/examples/ConvertWordToPdfAndPng.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import java.util.concurrent.CompletableFuture;
1313
import java.util.concurrent.ExecutionException;
1414

15+
import static java.lang.System.getenv;
16+
1517
/**
1618
* Example of saving Word docx to PDF and to PNG
1719
* Conversion is made by using same file parameter and processing two conversions simultaneously
@@ -21,15 +23,15 @@
2123

2224
public class ConvertWordToPdfAndPng {
2325
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
24-
Config.setDefaultSecret("YOUR API SECRET"); //Get your secret at https://www.convertapi.com/a
26+
Config.setDefaultSecret(getenv("CONVERTAPI_SECRET")); //Get your secret at https://www.convertapi.com/a
2527
Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"));
2628

2729
System.out.println("Converting DOCX to PDF and JPG in parallel");
2830

2931
Param docxFileParam = new Param("file", Paths.get("test-files/test.docx"));
3032

31-
CompletableFuture<ConversionResult> pdfResult = ConvertApi.convert("docx", "pdf", new Param[]{docxFileParam});
32-
CompletableFuture<ConversionResult> jpgResult = ConvertApi.convert("docx", "jpg", new Param[]{docxFileParam});
33+
CompletableFuture<ConversionResult> pdfResult = ConvertApi.convert("docx", "pdf", docxFileParam);
34+
CompletableFuture<ConversionResult> jpgResult = ConvertApi.convert("docx", "jpg", docxFileParam);
3335

3436
System.out.println("PDF file saved to: " + pdfResult.get().saveFile(tempDir).get());
3537

0 commit comments

Comments
 (0)