दिलचस्प पोस्ट
सी ++ 11 रैवल्यूज़ और स्थानांतरित सिमेंटिक्स भ्रम (रिटर्न स्टेटमेंट) प्राधिकरण सर्वर समापन बिंदु कॉन्फ़िगर करें कस्टम के साथ हीपक की तुलना ख़राब है एंड्रॉइड: लॉन्च मोड में बग = "सिंगलटास्क"? -> गतिविधि स्टैक संरक्षित नहीं है सभी संभव तीन अक्षर स्ट्रिंग उत्पन्न करने का सबसे अच्छा तरीका क्या है? पायथन में कंप्यूटर का यूटीसी ऑफसेट हो रहा है टूल: एंड्रॉइड मैनिफेस्ट में जगह नहीं बदले <P: संवाद> के गाया और दृश्यमान विशेषताओं के बीच का अंतर .gitignore और .gitkeep के बीच अंतर क्या हैं? एंड्रॉइड एनडीके में फ़ाइल संचालन 'आयात मॉड्यूल' या 'मॉड्यूल आयात से' यह पता कैसे करें कि आप $ _SERVER के बिना HTTPS का उपयोग कर रहे हैं सी में एक ऑब्जेक्ट फ़ाइल क्या है? क्या वंश के घटनाक्रम श्रोताओं को नष्ट किए बिना आंतरिक एचटीएमएल में शामिल करना संभव है? Android में एक HTTP सर्वर कैसे बनाएं?

वसंत MVC का उपयोग करके पीडीएफ जेनरेट करें

मैं स्प्रिंग एमवीसी का उपयोग कर रहा हूं। मुझे एक ऐसी सेवा लिखनी है जो अनुरोध शरीर से इनपुट लेनी होगी, डेटा को पीडीएफ में जोड़ देगा और ब्राउज़र में पीडीएफ फाइल लौटाएगा। पीडीएफ दस्तावेज itextpdf का उपयोग करते हुए उत्पन्न होता है I मैं स्प्रिंग MVC का उपयोग कर यह कैसे कर सकता हूं मैंने इस का उपयोग करने की कोशिश की है

@RequestMapping(value="/getpdf", method=RequestMethod.POST) public Document getPDF(HttpServletRequest request , HttpServletResponse response, @RequestBody String json) throws Exception { response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment:filename=report.pdf"); OutputStream out = response.getOutputStream(); Document doc = PdfUtil.showHelp(emp); return doc; } 

शोहेल्फ़ फ़ंक्शन जो पीडीएफ उत्पन्न करता है मैं सिर्फ पीडीएफ में समय के लिए कुछ यादृच्छिक डेटा डाल रहा हूं।

 public static Document showHelp(Employee emp) throws Exception { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("C:/tmp/report.pdf")); document.open(); document.add(new Paragraph("table")); document.add(new Paragraph(new Date().toString())); PdfPTable table=new PdfPTable(2); PdfPCell cell = new PdfPCell (new Paragraph ("table")); cell.setColspan (2); cell.setHorizontalAlignment (Element.ALIGN_CENTER); cell.setPadding (10.0f); cell.setBackgroundColor (new BaseColor (140, 221, 8)); table.addCell(cell); ArrayList<String[]> row=new ArrayList<String[]>(); String[] data=new String[2]; data[0]="1"; data[1]="2"; String[] data1=new String[2]; data1[0]="3"; data1[1]="4"; row.add(data); row.add(data1); for(int i=0;i<row.size();i++) { String[] cols=row.get(i); for(int j=0;j<cols.length;j++){ table.addCell(cols[j]); } } document.add(table); document.close(); return document; } 

मुझे यकीन है कि यह गलत है मैं चाहता हूं कि पीडीएफ को ब्राउज़र के माध्यम से खोलने के लिए जेनरेट करें और खोलें / खोलें संवाद बॉक्स, ताकि यह क्लाइंट की फ़ाइल सिस्टम में संग्रहीत किया जा सके। कृपया मेरी मदद करें।

वेब के समाधान से एकत्रित समाधान "वसंत MVC का उपयोग करके पीडीएफ जेनरेट करें"

आप response.getOutputStream() साथ सही ट्रैक पर थे। response.getOutputStream() , लेकिन आप अपने कोड में कहीं भी इसका आउटपुट का उपयोग नहीं कर रहे हैं। मूलतः पीडीएफ फाइल के बाइट को सीधे आउटपुट स्ट्रीम में स्ट्रीम करने और प्रतिक्रिया को फ्लश करने के लिए आपको क्या करना चाहिए। वसंत में आप ऐसा कर सकते हैं:

 @RequestMapping(value="/getpdf", method=RequestMethod.POST) public ResponseEntity<byte[]> getPDF(@RequestBody String json) { // convert JSON to Employee Employee emp = convertSomehow(json); // generate the file PdfUtil.showHelp(emp); // retrieve contents of "C:/tmp/report.pdf" that were written in showHelp byte[] contents = (...); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType("application/pdf")); String filename = "output.pdf"; headers.setContentDispositionFormData(filename, filename); headers.setCacheControl("must-revalidate, post-check=0, pre-check=0"); ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(contents, headers, HttpStatus.OK); return response; } 

टिप्पणियाँ:

  • अपने तरीकों के लिए अर्थपूर्ण नामों का उपयोग करें: पीडीएफ दस्तावेज showHelp लिखता है एक विधि नामकरण एक अच्छा विचार नहीं है
  • एक byte[] में एक फ़ाइल पढ़ना: यहां उदाहरण
  • मैं फ़ाइल को अधिलेखित करने से बचने के लिए showHelp() में अस्थायी पीडीएफ फाइल नाम के लिए एक यादृच्छिक स्ट्रिंग जोड़ने का सुझाव देता हूं अगर दो उपयोगकर्ता एक ही समय में अनुरोध भेजते हैं