Dans ce tutoriel, nous allons expliquer comment implémenter l’approche asynchrone de Web Renderer. Il vous suffit d’envoyer du contenu HTML aux méthodes d’API SubmitPDFFromHTMLTask ou SubmitImageFromHTMLTask pour recevoir l’identificateur de tâche en réponse. Il existe également des méthodes SubmitPDFFromUrlTask et SubmitImageFromUrlTask pour restituer un FICHIER PDF ou une image à partir d’un URI Web public.

Après avoir reçu l’identificateur de tâche, vous devez vérifier l’état de la tâche en appelant la méthode GetRenderingTaskStatus. Vous devez appeler la même méthode après quelques secondes de retard tant que l’état de la tâche est égal à « Waiting ». Une fois que vous avez reçu « Completed » de la méthode GetRenderingTaskStatus, vous pouvez appeler la méthode DownloadResult pour télécharger le fichier final. Nous avons utilisé les bibliothèques client HTTP Apache dans ce didacticiel. Vous pouvez ajouter des dépendances ci-dessous dans votre fichier pom.xml.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpclient</artifactId>
     <version>4.5.13</version>
</dependency>

<dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpmime</artifactId>
     <version>4.5.13</version>
</dependency>

<dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.11.0</version>
</dependency>

Vous pouvez utiliser l’implémentation Java ci-dessous.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

public class WebRenderer {
    private static String submitPDFFromHTMLTask(CloseableHttpClient httpClient, String htmlContent, String uri, String rapidApiKey) throws IOException {
        HttpPost submitPDFFromHTMLTaskPost = new HttpPost("https://web-renderer.p.rapidapi.com/SubmitPDFFromHTMLTask");
        submitPDFFromHTMLTaskPost.addHeader("X-RapidAPI-Key", rapidApiKey);

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        builder.addTextBody("uri", uri, ContentType.TEXT_PLAIN);
        builder.addTextBody("useCompression", "false", ContentType.TEXT_PLAIN);
        builder.addTextBody("pageLabel", "Home Page", ContentType.TEXT_PLAIN);
        builder.addTextBody("messageLabel", "Initial Capture", ContentType.TEXT_PLAIN);
        builder.addTextBody("browserHeight", "768", ContentType.TEXT_PLAIN);
        builder.addTextBody("browserWidth", "1024", ContentType.TEXT_PLAIN);
        builder.addTextBody("htmlContent", htmlContent, ContentType.TEXT_PLAIN);

        HttpEntity requestEntity = builder.build();
        submitPDFFromHTMLTaskPost.setEntity(requestEntity);
        HttpResponse response = httpClient.execute(submitPDFFromHTMLTaskPost);
        if (response.getStatusLine().getStatusCode() != 200) {
            throw  new IOException("Cannot post rendering task");
        }

        HttpEntity responseEntity = response.getEntity();
        return EntityUtils.toString(responseEntity, "UTF-8");
    }

    private static String getRenderingTaskStatus(CloseableHttpClient httpClient, String taskId, String rapidApiKey) throws IOException {
        HttpGet getConversionTaskStatus = new HttpGet("https://web-renderer.p.rapidapi.com/GetRenderingTaskStatus?taskId=" + taskId);
        getConversionTaskStatus.addHeader("X-RapidAPI-Key", rapidApiKey);

        HttpResponse response = httpClient.execute(getConversionTaskStatus);
        if (response.getStatusLine().getStatusCode() != 200) {
            throw  new IOException("Cannot get rendering task status");
        }

        HttpEntity responseEntity = response.getEntity();
        return EntityUtils.toString(responseEntity, "UTF-8");
    }

    private static byte[] downloadResult(CloseableHttpClient httpClient, String taskId, String rapidApiKey) throws IOException {
        HttpGet downloadResult = new HttpGet("https://web-renderer.p.rapidapi.com/DownloadResult?taskId=" + taskId);
        downloadResult.addHeader("X-RapidAPI-Key", rapidApiKey);

        HttpResponse response = httpClient.execute(downloadResult);
        if (response.getStatusLine().getStatusCode() != 200) {
            throw  new IOException("Cannot get rendered file");
        }

        HttpEntity responseEntity = response.getEntity();
        return EntityUtils.toByteArray(responseEntity);
    }

    public static void main(String[] args) throws Exception {
        String rapidApiKey = "<YOUR RAPID API KEY HERE>";
        String htmlContent = "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></head><body><h1>Hello World!</h1></body></html>";
        String uriOfHtmlContent = "https://www.google.com?hl=en";

        CloseableHttpClient httpClient = HttpClients.createDefault();
        String taskId = submitPDFFromHTMLTask(httpClient, htmlContent, uriOfHtmlContent, rapidApiKey);
        int retryCount = 0;
        while (retryCount < 100)
        {
            retryCount++;
            Thread.sleep(5000);
            String status = getRenderingTaskStatus(httpClient, taskId, rapidApiKey);
            if (status.equals("Completed"))
            {
                byte[] fileBytes = downloadResult(httpClient, taskId, rapidApiKey);
                File outputFile =new File("html_from_html.pdf");
                Files.write(outputFile.toPath(), fileBytes);
                break;
            }
            else if (status.equals("Waiting"))
            {
                continue;
            }
            else if (status.equals("Failed"))
            {
                throw new Exception("Cannot rendered file");
            }
            else
            {
                throw new Exception("Invalid status");
            }
        }
    }
}