2017-07-24 3 views
0

Ich benutze Documents4j, um Dokumente in PDF/a zu konvertieren. Ich möchte eine Funktion erstellen, die eine String Darstellung meiner Datei mit diesem Code zurück:OutputStream Problem mit Documents4j

String input=...; 
    DocumentType[] docType= {DocumentType.CSV,DocumentType.DOC,DocumentType.MHTML,DocumentType.MS_EXCEL,DocumentType.MS_WORD,DocumentType.ODS,DocumentType.PDF,DocumentType.RTF,DocumentType.TEXT,DocumentType.XML}; 

    IConverter converter = LocalConverter.make(); 

    ByteArrayInputStream in= new ByteArrayInputStream(input.getBytes());  
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 

    Future<Boolean> conversion = converter.convert(in) 
    .as(docType[n-1]) 
    .to(out) 
    .as(DocumentType.PDFA) 
    .prioritizeWith(1000) // optional 
    .schedule(); 

    String output=out.toString(); 

    in.close(); 
    out.flush(); 
    out.close(); 
    System.out.println(output); 
    return(output); 

Aber meine Ausgabe ist leer. Ich glaube, ich habe die Methode .to() missbraucht, indem ich ein unpassendes Argument eingegeben habe. Welchen OutputStream soll ich verwenden, wenn es kein ByteArrayOutputStream ist? Wenn es keinen praktikablen OutputStream anderen als FileOutputStream gibt, haben Sie eine Idee, wie Sie eine String in Ausgabe zurückgeben, ohne eine Datei zu irgendeinem Zeitpunkt zu erstellen?

Vielen Dank im Voraus für Ihre Aufmerksamkeit und Antworten.

Antwort

0

Beim Aufruf von schedule anstelle von exectue wird der Job im Hintergrund ausgeführt. Sie stehen hier vor einer Rennsituation.

Auch gibt es keinen guten Grund, toString auf einem Byte-Array-Ausgangsstrom aufzurufen; ratheer verwenden getBytes().

Verwandte Themen