मैं wkhtmltopdf.exe का उपयोग करके पीडीएफ के रूप में एक HTML दस्तावेज़ प्रस्तुत करने का प्रयास कर रहा हूं, जिसे मैं एक सी # वेब एप्लिकेशन से कॉल करता हूं।WkHtmlToPDF - stdin और headers/footers के साथ काम करना
एचटीएमएल दस्तावेज़ में प्रत्येक पृष्ठ पर दोहराए जाने वाले एक पाद लेख और शीर्षलेख की आवश्यकता होती है, जो --header-html <a path>
को तर्क के रूप में निर्दिष्ट करके wkhtmltopdf के साथ संभव है।
हालांकि, पाद लेख को रेज़र दृश्य से गतिशील रूप से प्रस्तुत किया जाता है और मुझे इसे डिस्क पर एक अस्थायी फ़ाइल में संग्रहीत करने की आवश्यकता नहीं होगी और उस पथ का उपयोग करने की आवश्यकता नहीं है, लेकिन मैं प्रस्तुत किए गए HTML का उपयोग करना चाहता हूं जो पहले से ही स्मृति में है। यही कारण है कि संभव है स्वयं दस्तावेज़ के लिए, StandardInput
धारा के लिए लिख, इसलिए तरह से:
var wkhtml = ConfigurationManager.AppSettings["WkHtmlToPdfPath"];
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.Arguments = "-q -n --disable-smart-shrinking - -";
p.Start();
var stdin = p.StandardInput;
stdin.AutoFlush = true;
stdin.Write(template);
stdin.Dispose();
शीर्ष लेख और पाद HTML के लिए एक ही बात करने के लिए क्या यह संभव है, अर्थात् का सहारा के बिना इनलाइन में इसे पारित करने के अस्थायी फ़ाइलें?
मैं कोशिश की है:
stdin.Write(string.Format("--footer-html {0} ", footer));
लेकिन निश्चित रूप से, यह सिर्फ व्यवहार करता है कि दस्तावेज़, नहीं एक पाद लेख के भाग के रूप।
मुख्य कारण मैं पाद लेख और शीर्षलेख को गतिशील रूप से प्रस्तुत करना चाहता हूं (ज्यादातर) किसी अन्य मुद्दे के कारण होता है। हालांकि गतिशील शीर्षलेख और पाद लेख होना अच्छा लगेगा, यह ज्यादातर समस्या को हल करने के लिए है जो मुझे पूर्ण पथ (यानी: सी: \ टेम्पलेट्स \ images \ logo.png) वाली छवियों से लिंक करना है क्योंकि सापेक्ष पथ (यानी: छवियों/logo.png) जब आप stdin का उपयोग करते हैं तो काम नहीं करते हैं और बस HTML के स्ट्रिंग ब्लॉब में पास होते हैं, इसलिए मुझे रनटाइम पर रेजर के माध्यम से पूर्ण पथ डालना होगा।
इस मुद्दे के लिए, मैं प्रक्रिया संबंधित पथ से मेल करने की कार्यशील निर्देशिका स्थापित करने की कोशिश की है, लेकिन कोई लाभ नहीं हुआ:
p.StartInfo.WorkingDirectory = @"C:\templates";
मुझे लगता है कि समस्या का समाधान कर सकता है, कि के 90% हल होगा मुद्दा भी।
मेरे पास एक ही समस्या है, लेकिन चूंकि Wkhtmltopdf हेडर/पादर्स को अलग करता है (बाहरी पथ/यूआरएल के माध्यम से) मैं एक HTML दस्तावेज़ को परिभाषित करता हूं जिसे मैंने गतिशील डेटा को अपने यूआरएल में खिलाया।तब मैंने कुछ जावास्क्रिप्ट के साथ निकाला। – Alex