2012-12-31 3 views
0

내가 도달하려고하는 목표는 PDF를 Oracle 데이터베이스에 BLOB로 저장하는 것입니다. 현재 사용하고있는 서블릿은 HttpServletResponse를 통해 pdf 만 보냅니다.OutputStream to byte []

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

나는 printToResponse 스크립트에 액세스 할 수없는, 그래서 나는 그것이 무엇을하는지 모른다. 내가 아는 전부는 응답이 OutputStream을 얻을 수있는 HttpServletResponse 유형을 가지고 있으며 myTemplate은 내가 액세스하지 않은 IDocument 인터페이스를 구현합니다.

blob로 저장하기 위해 myTemplate 또는 응답을 바이트 배열로 가져올 수 있다면 괜찮을 것입니다. 그러나 모든 검색에서 출력 스트림이 아닌 입력 스트림에서 바이트 배열을 만드는 코드 만 발견했습니다.

아무도 도와 줄 수 있습니까?

+0

메모리 스트림 (입출력 스트림)에 인쇄하고, 템플릿으로 전달한 다음 나중에 읽는'IDocument'의 자손을 구현해야합니다. – Alex

답변

0

나는 서블릿이 Printers.getPDFPrinter(0)하지만 접근 사용하는 라이브러리 확실하지 않다 : 라이브러리가 아닌 다른 방법을 제공 할 수

, 나는 서블릿도 원본과 물방울 스트림을 위임 할 PDF 귀하의 ServletOutputStream 요구를 반환해야하는 경우 HttpServletResponseWrapper에서 상속 선호 할 것입니다.

나중에 서블릿에서 ID를 반환하여 데이터베이스에서 PDF를 가져 오는 경우 사용자 고유의 HttpServletResponse을 구현해야합니다. 이 경우 Proxy을 사용하고 InvocationHandlergetOutputStream()을 사용합니다.

+0

실제로는 printToStream 메서드가 있습니다. 감사합니다. – Mathiouss

1

해당 코드는 content-type 및 일부 다른 비트를 설정해야하기 때문에 전체 HttpResponse가 필요합니다. 소리가 나는 것처럼 들리므로 "모의 (mock)"응답 객체를 생성하고 출력 스트림에 대한 쓰기를 가로 채기 위해 관련 메서드를 재정의 할 수 있습니다. PDFWriter에 ByteArrayOutputStream을 제공하여 바이트 []를 가져 와서 DB에 쓸 수 있습니다.