我正在尝试使用 libre/openpdf ( https://github.com/LibrePDF/OpenPDF ) 和 spring 的 routerfunctions 在内存中创建一个 pdf。
我有一个com.lowagie.text.Element
包含 pdf 内容的通量。
com.lowagie.text.pdf.PdfWriter
used, 需要acom.lowagie.text.Document
和OutputStream
. Element
s 被添加到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()))
}
上述方法有效,但在弹性线程内有一个丑陋的块,并且不保证资源的清理。
有没有一种简单的方法可以将 an 的输出OutputStream
转换为 s 的通量DataBuffer
?