Ce billet présente un exemple d’utilisation d’ARender pour la conversion d’un document Word en PDF. Pour cela, nous allons voir comment exploiter l’API du serveur de rendition d’ARender qui est chargé de convertir les documents en PDF et/ou de les transformer en images.
Avant tout, il s’agit d’importer les dépendances à ARender qui sont nécessaires pour cet exemple. Dans le cas d’un projet Maven, ajouter au fichier pom.xml :
<dependency>
<groupId>com.arondor.arender</groupId>
<artifactId>arondor-arender-common</artifactId>
<version>2.0.3</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.arondor.arender</groupId>
<artifactId>arondor-arender-client-javarmi</artifactId>
<version>2.0.3</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Cette première étape consiste en la définition des informations essentielles pour l’utilisation de l’API. L’objet DocumentService encapsule la communication avec le serveur de rendition (qui peut être distant) effectuée grâce au protocole RMI.
ClientDocumentService clientDocumentService = new ClientDocumentService();
clientDocumentService.setRemoteTarget("rmi://localhost:1789/JavaRMIDocumentService");
clientDocumentService.setMaxTries(3);
Le chargement du document sur le serveur de rendition est réalisé grâce à l’appel de la méthode loadDocument(DocumentAccessor documentAccessor) de l’interface DocumentService (que l’objet ClientDocumentService implémente). Le paramètre fourni à cette méthode, le DocumentAccessor, est un objet permettant au serveur d’accéder à un document (i.e son contenu, ses méta-données…). Dans cet exemple, le document en question est stocké sur le système de fichier local : nous instancions donc un DocumentAccessorByteArray grâce au chemin du document à convertir.
String fileToConvertPath = "C:\\ARender_User\\Documents\\myWordDocument.docx";
FileInputStream fileInputStream = new FileInputStream(fileToConvertPath);
DocumentAccessor documentAccessor = new DocumentAccessorByteArray(fileInputStream);
DocumentId documentId = clientDocumentService.loadDocument(documentAccessor);
Nota: Différentes implémentations du DocumentAccessor sont fournies nativement par ARender. Mais cette interface reste un point d’extension d’ARender qui en lui fournissant un accesseur approprié peut être capable de récupérer un document dans n’importe quel système d’information.
Au sein d’un serveur de rendition, un document peut se trouver dans différents états. Dans cet exemple, les états qui nous intéressent sont :
Ainsi différents accesseurs, implémentant l’interface DocumentAccessor, sont stockés permettant d’accéder à ces différents états. L’énumération DocumentAccessorSelector permet ainsi de récupérer le DocumentAccessor approprié.
DocumentAccessor renderedDocumentAccessor = clientDocumentService.getDocumentAccessor(documentId,DocumentAccessorSelector.RENDERED);
InputStream pdfDocumentInputStream = renderedDocumentAccessor.getInputStream();
Pour récapituler, nous avons dans ce court exemple montré comment utiliser l’API d’ARender afin de convertir notre document myWordDocument.docx en PDF.