0

libre/openpdf ( https://github.com/LibrePDF/OpenPDF ) と spring のルーター関数を使用してメモリ内に pdf を作成しようとしています。

com.lowagie.text.ElementPDFのコンテンツを含む Fluxがあります。

使用され、とcom.lowagie.text.pdf.PdfWriterがかかります。が に追加され、データが に書き込まれます。com.lowagie.text.DocumentOutputStreamElementDocumentOutputStream

の出力Outputstreamを の本体に書き込む必要がありますorg.springframework.web.reactive.function.server.ServerResponse

私は以下を使用してこれを解決しようとしました:

//inside the routerfunctionhandler

val content: Flux<Element> = ...
val byteArrayOutputStream = ByteArrayOutputStream()
val document = Document()
PdfWriter.getInstance(document, byteArrayOutputStream)
document.open()

content.doOnNext { element ->
    document.add(element)
}
    .ignoreElements()
    .block()
document.close()
byteArrayOutputStream.toByteArray().toMono()
    .let { 
        ok().body(it.subscribeOn(Schedulers.elastic())) 
    }

上記は機能しますが、エラスティック スレッド内に醜いブロックがあり、リソースのクリーンアップは保証されません。

OutputStreaman の出力を s のFlux に変換する簡単な方法はありDataBufferますか?

4

1 に答える 1