7

Tôi có tài liệu xhtml mà tôi đang chuyển sang PDF bằng flyingsaucer. Xhtml có một số thẻ có hình ảnh được mã hóa base64. Nguồn của xhtml là động nên cấu trúc của nơi mà các thẻ hình ảnh có thể khác nhau. Đây là mẫu của thẻ trông như thế nào:Hiển thị hình ảnh được nhúng trong PDF bằng Flying-Saucer từ html

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

Khi tôi xem html trong trình duyệt, hình ảnh xuất hiện chính xác, tuy nhiên phần tử img không được hiển thị trong PDF cuối cùng. Đây là cách tôi kết xuất nó ra để tạo PDF.

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

Bất cứ ai có thể cho tôi biết tôi nên thực hiện phương pháp nào để thực hiện việc này? Tuy nhiên, tôi thấy this posting, tôi đang sử dụng hình ảnh nội tuyến nên tôi không thể thấy cách tôi có thể thực hiện điều này bằng cách sử dụng giải pháp của Edd.

Cảm ơn trước

+0

Có một tính năng requ để tạo url dữ liệu cho hình ảnh hoạt động trực tiếp trong Flying Saucer: https://code.google.com/p/flying-saucer/issues/detail?id=202 – Thilo

Trả lời

7

Có, bạn có thể sử dụng phương pháp đưa ra ở đây: Render image from servlet in flyingsaucer generated pdf

đâu Edd có:

 InputStream input = null; 
     try { 
      input = ...; 
      byte[] bytes = IOUtils.toByteArray(input); 
      Image image = Image.getInstance(bytes); 

Trong trường hợp Edd của hình ảnh được phát ra từ một nguồn ở xa (ông bỏ qua bit đó với input = ...;). Trong trường hợp của bạn, bạn chỉ muốn đọc nó từ dữ liệu được mã hóa Base64 của bạn (văn bản sau base64,. Trước tiên, hãy sử dụng Base64 decoder để nhận dữ liệu nhị phân, thành byte[] hoặc Luồng, sau đó bạn có thể sử dụng Java ImageIO để tạo hình ảnh từ byte của mình và làm theo cách tiếp cận Edd để có được hình ảnh vào PDF Kudos để Edd đây (upvote cho chắc chắn!)

+2

Tôi có thể làm cho nó hoạt động bằng cách sử dụng phương pháp này. Cảm ơn! –

4

Flying Saucer hỗ trợ dữ liệu:... giao thức natively Tất cả bạn phải làm là đăng ký một xử lý giao thức:

-Djava.protocol.handler.pkgs=org.xhtmlrenderer.protocols 

Không cần cho servlets nào khác.

+2

Bạn có liên kết về cách trình xử lý giao thức được đăng ký không? –

+0

Truyền thuyết - cảm ơn! – rodnaph

Các vấn đề liên quan