Tôi có một ứng dụng Spring và cần xây dựng hỗ trợ cho việc tạo PDF. Tôi đang nghĩ đến việc sử dụng Flying-saucer cùng với Thymeleaf để hiển thị tệp PDF. Tuy nhiên, tôi không thể tìm thấy nhiều thông tin về việc sử dụng đĩa bay cùng với Thymeleaf. Có ai khác đã sử dụng những công nghệ đó với nhau không?Chiếc đĩa bay, Thymeleaf và Spring
15
A
Trả lời
17
Tôi đang sử dụng Flyingsaucer-R8 với Thymeleaf 2.0.14 mà không gặp sự cố (và tôi chắc chắn phiên bản hiện tại của Thymeleaf cũng hoạt động).
Tôi có riêng biệt TemplateEngine
với trình phân giải mẫu lớp con được định cấu hình cho mục đích này. Sử dụng nó để sản xuất XHTML
là String
. Flyingsaucer tạo ra tài liệu PDF từ kết quả sau đó. Kiểm tra ví dụ dưới đây.
Mã dưới đây là ví dụ - KHÔNG SẢN XUẤT sẵn sàng sử dụng mã nó với KHÔNG BẢO ĐẢM. Vì lợi ích của sự rõ ràng không có xử lý cố gắng bắt và không có bộ nhớ đệm tài nguyên (tạo PDF là hoạt động khá tốn kém). Xem xét điều đó.
Mã
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.springframework.core.io.ClassPathResource;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
public class FlyingSoucerTestService {
public void test() throws DocumentException, IOException {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("META-INF/pdfTemplates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("XHTML");
templateResolver.setCharacterEncoding("UTF-8");
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
Context ctx = new Context();
ctx.setVariable("message", "I don't want to live on this planet anymore");
String htmlContent = templateEngine.process("messageTpl", ctx);
ByteOutputStream os = new ByteOutputStream();
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver fontResolver = renderer.getFontResolver();
ClassPathResource regular = new ClassPathResource("/META-INF/fonts/LiberationSerif-Regular.ttf");
fontResolver.addFont(regular.getURL().toString(), BaseFont.IDENTITY_H, true);
renderer.setDocumentFromString(htmlContent);
renderer.layout();
renderer.createPDF(os);
byte[] pdfAsBytes = os.getBytes();
os.close();
FileOutputStream fos = new FileOutputStream(new File("/tmp/message.pdf"));
fos.write(pdfAsBytes);
fos.close();
}
}
Template
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring3-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
div.border {
border: solid;
border-width: 1px 1px 0px 1px;
padding: 5px 20px 5px 20px;
}
</style>
</head>
<body style="font-family: Liberation Serif;">
<div class="border">
<h1 th:text="${message}">message</h1>
</div>
</body>
</html>
Các vấn đề liên quan
- 1. Phông chữ Chiếc đĩa bay cho các ký tự unicode
- 2. Chiếc đĩa bay giấu đầu trang và chân trang trên trang đầu tiên
- 3. Spring MVC, Thymeleaf & REST
- 4. I18n trong Spring boot + Thymeleaf
- 5. Thymeleaf + Spring: Làm cách nào để ngắt dòng?
- 6. Spring Boot Dandelion Datatables Thymeleaf tìm kiếm giữa các ngày
- 7. Thymeleaf vs Tiles
- 8. Lựa chọn giữa Thymeleaf và Angular cho một dự án Spring MVC mới
- 9. Không thể xác thực khi làm việc với Spring Boot và Thymeleaf
- 10. Làm cách nào để sử dụng thư viện thẻ tùy chỉnh với Thymeleaf và Spring Boot?
- 11. Trộn các công nghệ phía trước và phía máy chủ (Spring, Thymeleaf, AngularJS)
- 12. Làm thế nào để hiển thị các tin nhắn trong Thymeleaf và Spring Boot?
- 13. Đầu và Tên trong Thymeleaf
- 14. Thymeleaf và inline kịch bản SAXParseException
- 15. Ngày định dạng trong Thymeleaf
- 16. Thymeleaf và tĩnh Resources với dấu vân tay
- 17. Spring Boot & Thymeleaf - loại bỏ lỗi HTML nghiêm ngặt kiểm tra
- 18. Spring + Thymeleaf - cách triển khai phân trang cho một danh sách
- 19. Spring MVC: Làm thế nào để có được url hiện tại Thymeleaf
- 20. Thiết lập biến javascript từ mô hình Spring bằng cách sử dụng Thymeleaf
- 21. Thymeleaf với Spring Security - cách kiểm tra xem người dùng có đăng nhập hay không?
- 22. dễ bay hơi và const dễ bay hơi std :: tuple và std :: get
- 23. Có bất kỳ phần bổ sung nào cho Thymeleaf cho Spring Roo không?
- 24. Spring MVC + Thymeleaf: thêm biến vào bối cảnh của tất cả các mẫu
- 25. nhầm lẫn dễ bay hơi và đôi
- 26. dễ bay hơi và Thread.MemoryBarrier trong C#
- 27. Thymeleaf Map Mẫu Binding
- 28. img không hiển thị bằng Thymeleaf và Springboot
- 29. Sự khác biệt giữa Thymeleaf bao gồm và thay thế?
- 30. Cách quy mô một chiếc CAShapeLayer
@ michal.kreuzman hy vọng bạn vẫn còn với chúng tôi vì giải pháp này đã giúp tôi ra một chút. Tất cả là tốt nhất. Được trích dẫn từ trên: 'ctx.setVariable (" message "," Tôi không muốn sống trên hành tinh này nữa "); – KingJahfy
Cách tiếp cận này cũng không giải quyết vấn đề quốc tế hóa, sử dụng messages.properties để dịch. Bên cạnh đó, nó hoạt động. – SiriusBits