2014-04-19 9 views
15

मेरे पास एक स्प्रिंग एप्लिकेशन है और पीडीएफ पीढ़ी के लिए समर्थन बनाने की आवश्यकता है। मैं पीडीएफ प्रस्तुत करने के लिए थाइमेलीफ के साथ फ्लाइंग-सॉकर का उपयोग करने के बारे में सोच रहा हूं। हालांकि, मुझे थाइमेलीफ के साथ फ्लाइंग-सॉकर का उपयोग करने के बारे में अधिक जानकारी नहीं मिल रही है। क्या किसी और ने तकनीकों के साथ उनको इस्तेमाल किया है?फ्लाइंग सॉकर, थाइमेलीफ और स्प्रिंग

उत्तर

17

मैं फ्लाईंग्सौसर-आर 8 का उपयोग थूमेलीफ 2.0.14 के साथ समस्याओं के बिना कर रहा हूं (और मुझे यकीन है कि थाइमेलीफ का वर्तमान संस्करण भी काम करता है)।

मेरे पास इस उद्देश्य के लिए कॉन्फ़िगर क्लासपाथ टेम्पलेट रिज़ॉल्वर के साथ अलग TemplateEngine है। XHTML को String के रूप में उत्पादित करने के लिए इसका उपयोग करना। फ्लाईंग्सौसर परिणामस्वरूप पीडीएफ दस्तावेज बनाता है। नीचे उदाहरण देखें। नहीं उत्पादन तैयार कोड कोई वारंटी नहीं के साथ उपयोग - नीचे

कोड उदाहरण है। स्पष्टता के लिए कोई प्रयास करने की क्षमता नहीं है और कोई संसाधन कैशिंग नहीं है (पीडीएफ बनाना काफी महंगा ऑपरेशन है)। उस पर विचार करे।

कोड

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(); 
    } 
} 

खाका

<?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> 
+0

@ michal.kreuzman आशा है कि आप हमारे साथ अभी भी कर रहे हैं क्योंकि इस समाधान मुझे बाहर एक सा मदद की। शुभकामनाएं। ऊपर से उद्धृत: 'ctx.setVariable (" संदेश "," मैं अब इस ग्रह पर नहीं रहना चाहता हूं "); – KingJahfy

+0

यह दृष्टिकोण अनुवाद के लिए संदेशों.प्रोपर्टी का उपयोग करके अंतर्राष्ट्रीयकरण को भी संबोधित नहीं करता है। इसके अलावा, यह काम करता है। – SiriusBits

संबंधित मुद्दे