2011-08-04 12 views
9

मैं एक जावास्क्रिप्ट चार्ट मैं एक मॉडल विंडो में है कि एक पीडीएफ बनाने के प्रयास कर रहा हूँ प्रतिपादन के साथ पीडीएफ बनाएँ (मेरी चार्ट एक .aspx ध्यान में रखते हुए जावास्क्रिप्ट और सीएसएस का एक संयोजन है)। प्रस्तुत पीडीएफ फ़ाइल में एकमात्र चीज खिड़की से स्थिर सामग्री है, वास्तविक जावास्क्रिप्ट चार्ट वहां नहीं है।wkhtmltopdf और जावास्क्रिप्ट

public byte[] WKHtmlToPdf(string url) 
    { 
     var fileName = " - "; 
     var wkhtmlDir = "C:\\Temp\\wkhtml"; 
     var wkhtml = "C:\\Temp\\wkhtml\\wkhtmltopdf.exe"; 
     var p = new Process(); 

     p.StartInfo.CreateNoWindow = true; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.RedirectStandardError = true; 
     p.StartInfo.RedirectStandardInput = true; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.FileName = wkhtml; 
     p.StartInfo.WorkingDirectory = wkhtmlDir; 

     string switches = ""; 
     switches += "--print-media-type "; 
     switches += "--margin-top 0mm --margin-bottom 0mm --margin-right 0mm --margin-left 0mm "; 
     switches += "--page-size Letter "; 
     p.StartInfo.Arguments = switches + " " + url + " " + fileName; 
     p.Start(); 

     //read output 
     byte[] buffer = new byte[32768]; 
     byte[] file; 
     using (var ms = new MemoryStream()) 
     { 
      while (true) 
      { 
       int read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length); 

       if (read <= 0) 
       { 
        break; 
       } 
       ms.Write(buffer, 0, read); 
      } 
      file = ms.ToArray(); 
     } 

     // wait or exit 
     p.WaitForExit(60000); 

     // read the exit code, close process 
     int returnCode = p.ExitCode; 
     p.Close(); 

     return returnCode == 0 ? file : null; 
    } 

कैसे मैं जावास्क्रिप्ट चार्ट हड़पने सकता है पर कोई भी विचार:

मेरे पीडीएफ बनाने के लिए कॉल इस प्रकार है? शायद .Net संस्करण अधिक उपयुक्त होगा या मुझे जेनरेट किए गए पृष्ठ को फ़ाइल में सहेजना होगा और उसे टूल में पास करना होगा।

धन्यवाद।

+0

मुझे यह समस्या थी और यह सुनिश्चित करके इसे ठीक किया गया कि मैं wkhtmltopdf 0.9.9 का उपयोग कर रहा था। "मणि इंस्टॉल" संस्करण (0.8.3) इसे काट नहीं रहा था। – dfrankow

उत्तर

9

हमारी परियोजना में हम सफलता के साथ कुछ अनुकरण करते हैं। हम इस समय Highcharts के साथ संयोजन में wkhtmltopdf 0.9.9 का उपयोग करते हैं। JQuery फ्लॉट के साथ हमें थोड़ा tweaking के बाद भी सफलता मिली थी। हमारी प्रोजेक्ट में हम पहले एक स्ट्रिंग को दृश्य प्रस्तुत करते हैं और इसे अपने stdin का उपयोग करके wkhtml पर पास करते हैं। फिर हम wkhtml के stdout पकड़ते हैं और इसे वापस ब्राउज़र पर पास करते हैं।

आपका wkhtml-सेटिंग सही हो सकता है, को छोड़कर हम stdin और stdout का उपयोग लगता है। पता नहीं है कि यह एक समस्या हो सकती है।

आप उन चार्ट में से एक का उपयोग करते हैं मुझे लगता है कि मैं आपकी मदद कर सकते हैं। आप किस चार्ट का उपयोग कर रहे हैं?

एक आखिरी ध्यान दें: Wkhtmltopdf 0.10rc2 बाहरी संसाधनों (जे एस/सीएसएस) स्थानीय होस्ट से लोड हो रहा है जब एक portnumber बंदरगाह से अलग का उपयोग कर कुछ समस्याएं हैं लगता है 80

+0

आपके लिए धन्यवाद "एक आखिरी नोट", मैं वर्तमान में इसे ठीक करने का तरीका खोज रहा हूं :) – AgelessEssence

+1

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

+0

आपने उल्लेख किया है कि स्ट्रिंग को दृश्य प्रस्तुत करना? उसको कैसे करे? मेरे पास जावास्क्रिप्ट और डायनामिक ट्रेंड लाइन चार्ट (हाईचार्ट से) प्रतिपादन है। लेकिन चार्ट खुद पीडीएफ पर नहीं दिखाया गया है। कोई संकेतक? – Dhamayanthi

6

ऐसा लगता है कि आप एक चार्ट के उत्पादन, जो टैग द्वारा पहचानने एक ExtJS 4 स्क्रिप्ट से है पाने के लिए कोशिश कर रहे हैं।

ext स्क्रिप्ट शायद चार्ट के एनीमेशन के कुछ उपयोग कर रहा है, और निश्चित रूप से जावास्क्रिप्ट की घटनाओं के लिए निष्पादित और चार्ट प्रस्तुत करना इंतजार कर रहे होंगे। ऐसा इसलिए संभवतः डिफ़ॉल्ट समय (200 एमएस) के समय तक नहीं किया जाता है।

एक त्वरित सुधार कमांड लाइन के लिए जावास्क्रिप्ट-विलंब पेज विकल्प जोड़ने के लिए होगा:

wkhtmltopdf http://dev.sencha.com/deploy/ext-4.0.2a/examples/charts/Mixed.html --javascript-delay=2000 test.pdf निश्चित रूप से * nix पर काम करेंगे, और एक समान बात खिड़कियों पर काम करना चाहिए।

+0

धन्यवाद, अच्छा विचार। दुर्भाग्य से यह मेरे लिए कुछ भी नहीं बदलता है। मुझे लगता है कि यह मॉडल विंडो हो सकती है जिसमें चार्ट प्रदर्शित होता है और आपकी extjs धारणा सही है। –

1

मैं wkhtmltopdf 0.9.9 उपयोग कर रहा था और pdfkit माणिक मणि, और एक ही समस्या है।

मैंने पूर्ण यूआरएल का उपयोग करने के लिए सभी टैग्स को बदलकर इसे ठीक किया। ऐसा लगता है कि wkhtmltopdf को पता नहीं था कि पृष्ठ को कितना यूआरएल एक्सेस किया गया था, इसलिए सापेक्ष संसाधनों को लोड नहीं किया जा रहा था। मुझे नहीं पता कि यह पीडीएफकिट या wkhtmltopdf की सीमा है या नहीं।

मैं https://github.com/mileszs/wicked_pdf से विचार आया।