7

flyingsaucer를 사용하여 PDF로 변환하는 xhtml 문서가 있습니다. xhtml에는 base64로 인코딩 된 이미지가 인라인되어있는 여러 개의 태그가 있습니다. xhtml의 소스는 동적이므로 이미지 태그의 구조가 다를 수 있습니다.HTML에서 Flying-Saucer를 사용하여 PDF로 임베디드 이미지 렌더링

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAEuCAYAAADbW4YFAAAgAElEQVR4Aex9CYBdRZ ... 

내가 브라우저에서 HTML 보면, 이미지가 나타납니다 올바르게 그러나 img 요소가 최종 PDF 렌더링되지 않습니다 :이 태그와 같은 모습의 샘플입니다. 다음은 PDF를 만들기 위해 렌더링하는 방법입니다.

ITextRenderer renderer = new ITextRenderer(); 
renderer.setDocument(builder.parse(source), ""); 
renderer.layout(); 
renderer.createPDF(response.getOutputStream(),true); 

아무에게도이 작업을 수행하기 위해 어떤 방법을 사용해야하는지 알려 줄 수 있습니까? this posting을 보았지만 인라인 이미지를 사용하고있어 Edd의 솔루션을 사용하여이를 수행하는 방법을 알 수 없습니다. 사전에

감사

+0

기능 요구 사항이 있습니다. Flying Saucer에서 직접 이미지 용 데이터 URL을 만들 수 있습니다. https://code.google.com/p/flying-saucer/issues/detail?id=202 – Thilo

답변

7

예, 여기에 주어진 접근 방식 사용할 수 있습니다 EDD가있다 Render image from servlet in flyingsaucer generated pdf

을 :

 InputStream input = null; 
     try { 
      input = ...; 
      byte[] bytes = IOUtils.toByteArray(input); 
      Image image = Image.getInstance(bytes); 
이미지가 원격 소스에서 오는 EDD의 경우

(그 해당 비트는 input = ...;으로 건너 뜁니다. 귀하의 경우 Base38로 인코딩 된 데이터 (base64, 이후의 텍스트)를 읽고 싶습니다. 먼저 Base64 decoder을 사용하여 byte[] 또는 Stream으로 이진 데이터를 가져오고 Java ImageIO을 사용하여 바이트에서 이미지를 만들고 PDF 파일로 이미지를 얻을 EDD의 접근 방식에 따라 명예를 EDD 여기에 (확실히 upvote에!)

+2

이 접근 방식을 사용하여 작동시킬 수있었습니다. 감사! –

4

비행 - 접시는 데이터를 지원합니다...

: 기본적으로 프로토콜 당신이해야 할 모든 등록 프로토콜 핸들러
-Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols 

서블릿이 필요하지 않습니다 .

+2

프로토콜 처리기 등록 방법에 대한 링크가 있습니까? –

+0

전설 - 감사합니다! – rodnaph