libre/openpdf ( https://github.com/LibrePDF/OpenPDF ) と spring のルーター関数を使用してメモリ内に pdf を作成しようとしています。
com.lowagie.text.Element
PDFのコンテンツを含む Fluxがあります。
使用され、とcom.lowagie.text.pdf.PdfWriter
がかかります。が に追加され、データが に書き込まれます。com.lowagie.text.Document
OutputStream
Element
Document
OutputStream
の出力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()))
}
上記は機能しますが、エラスティック スレッド内に醜いブロックがあり、リソースのクリーンアップは保証されません。
OutputStream
an の出力を s のFlux に変換する簡単な方法はありDataBuffer
ますか?