Technical blog

A more subdued subheader

Conversion d'un email et ses pièces jointes à l'aide d'ARender

  • Marye
  • 28 janv., 2013

Cet article fait suite à un post précédent concernant la manipulation de l’API d’ARender. Aujourd’hui, nous allons montrer comment convertir un email (au format EML) ainsi que la pièce jointe qu’il contient afin d’illustrer la manipulation de documents composites.

Les dépendances sont identiques à celles de l’article précédent.

 

1. Conversion basique

String fileToConvertPath = "C:\\ARender_User\\Documents\\myEMLDocument.eml";
FileInputStream fileInputStream = new FileInputStream(fileToConvertPath);
DocumentAccessor documentAccessor = new DocumentAccessorByteArray(fileInputStream);
DocumentId documentId = clientDocumentService.loadDocument(documentAccessor);
DocumentAccessor renderedDocumentAccessor = clientDocumentService.getDocumentAccessor(documentId,DocumentAccessorSelector.RENDERED);
InputStream pdfDocumentInputStream = renderedDocumentAccessor.getInputStream();

A travers cette conversion basique, nous avons généré un document comprenant les trois parties de notre email d’exemple soient l’en-tête, le corps et la pièce jointe.

 

2. Conversion avancée

En outre, le moteur de rendition d’ARender offre la possibilité de générer un ficiher PDF par document fils soit un pour l’en-tête, un pour le corps et un pour la pièce jointe.

Pour cela, on récupère tout d’abord un objet implémentant l’interface DocumentLayout qui décrit la structure d’un document. Dans le cas d’un document composite, cet objet est une instance de la classe DocumentContainer.

DocumentLayout documentLayout = documentService.getDocumentLayout(documentId);
if (documentLayout instanceof DocumentContainer)
{
   DocumentContainer compositeDocumentLayout = (DocumentContainer) documentLayout;
}

Cette implémentation de DocumentLayout a des fils, nous pouvons donc itérer dessus afin de récupérer le DocumentAccessor de chacun des fils et le flux correspondant.

for (int childIndex = 0; childIndex < compositeDocumentLayout.getChildren().size(); childIndex++)
 {
   DocumentLayout childDocumentLayout = compositeDocumentLayout.getChildren().get(childIndex);
   DocumentAccessor renderedDocumentAccessor = documentService.getDocumentAccessor(
   childDocumentLayout.getDocumentId(), DocumentAccessorSelector.RENDERED);
   InputStream pdfDocumentInputStream = renderedDocumentAccessor.getInputStream();
 }

 

Conclusion

Dans ce second article concernant la manipulation de l’API d’ARender, nous avons montré en quelques lignes comment procéder à la conversion de chacune des entités composant un document composite (ici un email).