我试图达到的目标是将PDF保存到Oracle数据库中的BLOB中。目前,我使用的servlet只通过HttpServletResponse发回一个pdf。
Printers.getPDFPrinter(0).printToResponse(myTemplate, response, 0, TemplateA.PDF);
我没有访问printToResponse脚本的权限,所以我不知道它是做什么的。我只知道response有一个HttpServletResponse类型,我可以从中获取OutputStream,而myTemplate实现了一个我也没有访问过的IDocument接口。
如果我可以将myTemplate或response放入一个字节数组(以便将其保存为blob),那就没问题了。然而,在我的所有搜索中,我只找到了从输入流创建字节数组的代码,而不是输出流。
有谁能帮帮忙吗?
发布于 2012-12-31 23:54:01
我不确定servlet使用哪个库来访问Printers.getPDFPrinter(0),但是:
printToResponse (printToStream,printToFile,...?)以外的其他方法HttpServletResponse,在< ServletOutputStream >D10ServletOutputStream>上返回一个虚拟代码。这个虚拟子类必须通过委托给Blob.setBinaryStream(1).的结果来实现write(int b)
如果您想编写自己的HttpServletResponse,如果servlet也应该返回您的ServletOutputStream委托原始和Blob流所需的PDF,我更喜欢从HttpServletResponseWrapper继承。
如果您希望servlet只是返回一个id,以便稍后从数据库中检索PDF,那么您需要实现自己的HttpServletResponse。在本例中,我将使用Proxy,而InvocationHandler将处理getOutputStream()。
发布于 2012-12-31 23:35:25
该代码可能需要完整的HttpResponse,因为它还需要设置内容类型和其他一些位。尽管听起来很糟糕,但您可以创建一个“模拟”响应对象并覆盖相关方法,以便拦截其对输出流的写入。您可以为PDFWriter提供一个ByteArrayOutputStream,这样您就可以获取byte[]并将其写入到DB中。
https://stackoverflow.com/questions/14103348
复制相似问题