2016-02-19 15 views
8

में गतिशील टैब्यूलर डेटा रिपोर्ट मैं एक एमवीसी 5 वेब एप्लिकेशन पर काम कर रहा हूं जहां मुझे किसी भी डेटाबेस तालिका से एक रिपोर्ट उत्पन्न करने की आवश्यकता है। उपयोगकर्ता उस तालिका का चयन करेगा जिसे वह मुद्रित करना चाहता है, फिर रिपोर्ट में कौन से कॉलम शामिल करना है और सिस्टम को डेटा के साथ एक ग्रिड (टेबल) प्रदर्शित करना चाहिए।एएसपी.Net

एक HTML तालिका में डेटा प्रदर्शित करना निश्चित रूप से कोई समस्या नहीं है और मैंने डेटा के साथ Excel फ़ाइलों को उत्पन्न करने में भी कामयाब रहा है, जिसे उपयोगकर्ता डाउनलोड कर सकता है।

हालांकि मुझे पीडीएफ या कुछ अन्य प्रारूप जैसे रिपोर्ट का प्रिंट करने योग्य फॉर्म भी प्रदान करने की आवश्यकता है जिसे खोलने और प्रिंट करने के लिए विशेष सॉफ्टवेयर (जैसे एमएस ऑफिस) की आवश्यकता नहीं है।

पहले मैंने सोचा कि मुझे ReportViewer नियंत्रण के लिए जाना चाहिए, लेकिन समस्या यह है कि मेरी रिपोर्ट गतिशील है क्योंकि उपयोगकर्ता उसे आवश्यक कॉलम चुनता है। मैंने दूसरों से रिपोर्ट परिभाषा फ़ाइल उत्पन्न करने के प्रयासों को देखा है, लेकिन मैं कुछ बदसूरत की उम्मीद कर रहा था।

क्या HTML तालिका लेने का कोई तरीका है, जो अच्छी तरह से कोशिकाओं के आकार का आकलन करता है, और इससे पीडीएफ बनाते हैं? यदि कॉलम बहुत अधिक हैं तो मुझे कई पृष्ठों में रिपोर्ट को क्षैतिज रूप से विभाजित करने की कोई बात नहीं है।

+1

चूंकि आपके पास पहले से ही HTML है, तो मेरा सुझाव है कि आप iText के XMLWorker पर एक नज़र डालें: http://developers.itextpdf.com/examples/xml-worker/html-tables। उदाहरण जावा में हैं लेकिन सी # के लिए पर्याप्त स्पष्ट होना चाहिए। iTextSharp iText का .NET पोर्ट है। प्रकटीकरण: मैं iText सॉफ्टवेयर पर काम करता हूं। –

+0

दिलचस्प। क्या मैं क्षैतिज कॉलम को किसी भी तरह से संभाल सकता हूं? मेरा मतलब है, अगर एक पृष्ठ में फिट होने के लिए बहुत सारे कॉलम हैं, तो क्या मैं उनमें से कुछ को अगली में ले जा सकता हूं? – kagelos

+0

@kagelos मेरे पास एक समाधान है जो वास्तव में आप चाहते हैं कि चाहते हैं लेकिन इसे jquery की आवश्यकता है। तो क्या मैं jquery का उपयोग कर सकता हूं और आपको समाधान दे सकता हूं? –

उत्तर

2

आप Spartacus को आजमा सकते हैं।

यह अपेक्षाकृत नई .NET लाइब्रेरी है, जो पूरी तरह से सी # में लिखी गई है। यह कई अलग-अलग डेटाबेस से कनेक्ट हो सकता है और एक्सेल और पीडीएफ में रिपोर्ट जेनरेट कर सकता है।

मैं Google डिस्क में 3 फ़ाइलें अपलोड किया गया:

आदेश स्पार्टाकस का उपयोग करने के लिए आपको संदर्भ के लिए System.Data और System.Xml की जरूरत पैकेज, साथ ही Spartacus.dll।

Spartacus.Database.Generic v_database; 
Spartacus.Reporting.Report v_report; 
System.Data.DataTable v_table; 

v_database = new Spartacus.Database.Postgresql("127.0.0.1", "database", "postgres", "password"); 

v_table = v_database.Query(
    "select 'Example of Report made with Spartacus' as title, " + 
    "  product, " + 
    "  description, " + 
    "  unit, " + 
    "  quantity, " + 
    "  total_cost, " + 
    "  unit_cost " + 
    "from table", "REPORT"); 

v_report = new Spartacus.Reporting.Report(1, "template.xml", v_table); 
v_report.Execute(); 
v_report.Save("report.pdf"); 

ध्यान दें कि आप Spartacus.Database वस्तुओं का उपयोग करने की जरूरत नहीं:

निम्न उदाहरण में, मैं सरल चरणों में template.xml से report.pdf बनाया। यदि आप अन्य तरीकों से System.Data.DataTable प्राप्त कर सकते हैं, तो आप इसे रिपोर्ट ऑब्जेक्ट में पास कर सकते हैं।

हालांकि, एक पकड़ है।आप XML टेम्पलेट में देख सकते हैं, प्रत्येक स्तंभ के लिए, तुम्हें पता है की जरूरत है:

  • स्तंभ का नाम (जाहिर है)
  • शीर्षक
  • संरेखित (बाएं, सही या केन्द्र)
  • भरण (प्रतिशत , 100 मार्जिन के पेज शून्य चौड़ाई)
  • प्रकार (पूर्णांक, वास्तविक, बूलियन, CHAR, तारीख या STRING)

भरें और प्रकार आवश्यक हैं, और आप एमए कुल चौड़ाई किया जा रहा है आपको अपने सभी कॉलम के बारे में जानकारी रखने की जरूरत है। यदि यह भी प्राप्त करने के लिए कठिन है, और आप केवल स्तंभ नाम और प्रकार प्राप्त कर सकते हैं, तो आप एक aproximation केवल प्रकार के आधार पर, निम्नलिखित की तरह की गणना कर सकते हैं:

  • उत्पाद प्रकार स्ट्रिंग की है, डिफ़ॉल्ट भरने = 30
  • वर्णन प्रकार स्ट्रिंग की है, डिफ़ॉल्ट भरने = 30
  • इकाई प्रकार स्ट्रिंग की है, डिफ़ॉल्ट भरने = 30
  • मात्रा है प्रकार असली की, डिफ़ॉल्ट भरने = 15
  • कुल_लागत प्रकार असली की है, डिफ़ॉल्ट भरने = 15
  • unit_cost प्रकार असली की है, डिफ़ॉल्ट भरने = 15

सभी डिफ़ॉल्ट भरने की राशि 30 हैं + 30 + 30 + 15 + 15 + 15 = 135, 100 से अधिक तो तुम से 100 को सामान्य कर सकते हैं, इस तरह से:

  • कॉलम भरने = कॉलम डिफ़ॉल्ट भरने * (डिफ़ॉल्ट की राशि भरता/100)

उसके बाद, आपको गतिशील फ़ील्ड जानकारी के साथ गतिशील टेम्पलेट.एक्सएमएल फाइलें उत्पन्न करने की आवश्यकता होगी।

अस्वीकरण: मैं स्पार्टाकस निर्माता और रखरखाव हूं।

+0

बहुत अच्छा लगता है। मैं उन मामलों को कैसे संभाल सकता हूं जहां स्तंभ एक पृष्ठ में क्षैतिज रूप से फिट नहीं होते हैं? – kagelos

+0

@ कैगेलोस स्पार्टाकस इसकी अनुमति नहीं देता है। यदि आप निर्दिष्ट करते हैं कि कॉलम की कुल चौड़ाई का 30% है, तो इसकी कुल चौड़ाई का 30% हमेशा होगा। यदि सामग्री इस जगह में फिट नहीं है, तो स्पार्टाकस गतिशील रूप से सामग्री को काटता है। – wind39

0

एसएसआरएस को स्वचालित रूप से पेजिनेशन को संभालने के लिए बहुत अच्छा समर्थन है, लेकिन इसके नियमों का पालन करना महत्वपूर्ण है।

Understanding Pagination in Reporting Services (Report Builder 3.0 and SSRS)

आप एक रिपोर्ट तैयार की है एक पृष्ठ विस्तृत होने के लिए, लेकिन यह अनेक पृष्ठों में प्रस्तुत होती है, जाँच करें कि मार्जिन सहित रिपोर्ट शरीर, की चौड़ाई, की तुलना में शारीरिक पृष्ठ आकार बड़ा नहीं है चौड़ाई। खाली रिपोर्ट को आपकी रिपोर्ट में जोड़ने से रोकने के लिए, आप कंटेनर कोने को बाईं ओर खींचकर कंटेनर आकार को कम कर सकते हैं।

+0

मुझे विश्वास है कि आप प्रश्न का सबसे महत्वपूर्ण हिस्सा चूक गए हैं, जो कि रिपोर्ट के कॉलम गतिशील रूप से जोड़े/हटा दिए जाते हैं। अगर यह एक स्थिर रिपोर्ट थी, या मैं एचटीएमएल को पीडीएफ में परिवर्तित करने में दिलचस्पी लेता था तो मैं पहले स्थान पर कोई सवाल नहीं पूछूंगा। मैं एक समाधान की तलाश में हूं जहां मैं प्रोग्राम को क्षैतिज रूप से एकाधिक पृष्ठों में विभाजित कर सकता हूं। – kagelos

+0

आईएमएचओ एसएसआरएस के लिए सबसे अच्छा समर्थन है लेकिन आप चीजों की आवाज़ से उत्सुक नहीं थे। –

+0

@ जेरेमी थॉम्पसन मैं एसएसआरएस में प्रोग्रामेटिक रूप से एक रिपोर्ट कैसे बना सकता हूं जहां मैं कॉलम गतिशील रूप से जोड़ता हूं?जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, मैंने अब तक जिन समाधानों को देखा है, वे प्रिंटिंग (बदसूरत) टेक्स्ट/कोड द्वारा परिभाषा फ़ाइल बनाने का प्रयास करते हैं। मैं इससे बचना चाहता हूं। – kagelos