0

我试图达到的目标是将 PDF 保存到 Oracle 数据库中的 BLOB 中。目前,我使用的 servlet 仅通过 HttpServletResponse 发回一个 pdf。

Printers.getPDFPrinter(0).printToResponse(myTemplate, response, 0, TemplateA.PDF);

我无权访问 printToResponse 脚本,所以我不知道它的作用。我只知道响应有一个 HttpServletResponse 类型,我可以从中获取 OutputStream,而 myTemplate 实现了一个我也无法访问的 IDocument 接口。

如果我可以将 myTemplate 或响应放入字节数组(以便将其保存为 blob),那就没问题了。然而,在我所有的搜索中,我只找到了从输入流而不是输出流创建字节数组的代码。

任何人都可以帮忙吗?

4

2 回答 2

1

该代码可能需要完整的 HttpResponse,因为它还需要设置内容类型和其他一些位。尽管听起来很糟糕,但您可以创建一个“模拟”响应对象并覆盖相关方法以拦截其对输出流的写入。您可以为 PDFWriter 提供一个 ByteArrayOutputStream 以便您可以获取 byte[] 并将其写入您的数据库。

于 2012-12-31T15:35:24.650 回答
0

我不确定 servlet 使用哪个库来访问Printers.getPDFPrinter(0),但是:

  • 该库可能提供除printToResponse( printToStream, printToFile, ...?)以外的其他方法
  • 你可以通过你自己的HttpServletResponse返回一个虚拟的ServletOutputStream on getOutputStream()。这个虚拟子类必须通过委托Blob.setBinaryStream(1)的结果来实现write(int b ) 。

如果您想编写自己的HttpServletResponseHttpServletResponseWrapper ,如果 servlet 还应该返回您ServletOutputStream需要委托原始和 Blob 流的 PDF ,我更愿意继承。

如果您希望 servlet 只是为了返回一个 id 以便稍后从数据库中检索 PDF,您需要实现自己的HttpServletResponse. 在这种情况下,我会使用 aProxyInvocationHandlerhandles getOutputStream()

于 2012-12-31T15:54:01.177 回答