html - सकत - मोबाइल नंबर को प्राइवेट नंबर बनाने के लिए तरीका




HTML से पीडीएफ उत्पन्न करने के लिए wkhtmltopdf को कॉल करना (7)

Wkhtmltopdf लाइब्रेरी के लिए C # wrapper लाइब्रेरी (पी / Invoke का उपयोग करके) https://github.com/pruiz/WkHtmlToXSharp : https://github.com/pruiz/WkHtmlToXSharp

मैं एक HTML फ़ाइल से पीडीएफ फ़ाइल बनाने का प्रयास कर रहा हूं। थोड़ा सा देखने के बाद मैंने पाया: wkhtmltopdf सही होने के लिए। मुझे ASP.NET सर्वर से यह .exe कॉल करने की आवश्यकता है। मैंने कोशिश की है:

    Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.FileName = HttpContext.Current.Server.MapPath("wkhtmltopdf.exe");
    p.StartInfo.Arguments = "TestPDF.htm TestPDF.pdf";
    p.Start();
    p.WaitForExit();

सर्वर पर बनाई जा रही किसी भी फाइल की सफलता के बिना। क्या कोई मुझे सही दिशा में एक सूचक दे ​​सकता है? मैंने wkhtmltopdf.exe फ़ाइल को साइट की शीर्ष स्तर निर्देशिका में रखा है। क्या कहीं और इसे आयोजित किया जाना चाहिए?

संपादित करें: अगर किसी के पास एचटीएमएल से गतिशील रूप से पीडीएफ फाइलें बनाने के लिए बेहतर समाधान हैं, तो कृपया मुझे बताएं।


आप wkhtmltopdf को आउटपुट फ़ाइल के रूप में "-" निर्दिष्ट करके दक्षिण में अपने आउटपुट भेजने के लिए बता सकते हैं। फिर आप प्रक्रिया से आउटपुट को प्रतिक्रिया स्ट्रीम में पढ़ सकते हैं और फ़ाइल सिस्टम को लिखित अनुमतियों से बचने के मुद्दों से बच सकते हैं।


एएसपी .Net प्रक्रिया में शायद निर्देशिका में लेखन पहुंच नहीं है।

%TEMP% को लिखने के लिए कहने का प्रयास करें, और देखें कि यह काम करता है या नहीं।

साथ ही, अपना एएसपी नेट पेज बनाएं प्रक्रिया की stdout और stderr गूंजें, और त्रुटि संदेशों की जांच करें।


कई कारण हैं कि यह आम तौर पर एक बुरा विचार क्यों है। आप निष्पादित करने वाले निष्पादन योग्यों को कैसे नियंत्रित कर रहे हैं जो दुर्घटनाग्रस्त हो जाते हैं लेकिन यदि कोई दुर्घटना हो तो स्मृति में रहना समाप्त हो जाता है? इनकार करने वाले सेवा हमलों के बारे में क्या, या यदि कुछ दुर्भावनापूर्ण TestPDF.htm में आता है?

मेरी समझ यह है कि ASP.NET उपयोगकर्ता खाते को स्थानीय रूप से लॉगऑन करने का अधिकार नहीं होगा। इसे निष्पादन योग्य तक पहुंचने और फ़ाइल सिस्टम को लिखने के लिए सही फ़ाइल अनुमतियों की भी आवश्यकता है। आपको स्थानीय सुरक्षा नीति को संपादित करने और ASP.NET उपयोगकर्ता खाता (शायद एएसपीएनईटी) स्थानीय रूप से लॉगऑन करने की आवश्यकता है (यह डिफ़ॉल्ट रूप से अस्वीकार सूची में हो सकता है)। फिर आपको अन्य फ़ाइलों के लिए एनटीएफएस फाइल सिस्टम पर अनुमतियों को संपादित करने की आवश्यकता है। यदि आप साझा होस्टिंग वातावरण में हैं तो आपको आवश्यक कॉन्फ़िगरेशन लागू करना असंभव हो सकता है।

इस तरह के बाहरी निष्पादन योग्य का उपयोग करने का सबसे अच्छा तरीका एएसपी.नेट कोड से नौकरियों को कतार करना है और कुछ प्रकार की सेवा कतार की निगरानी करती है। यदि आप ऐसा करते हैं तो आप अपने आप को बुरी चीजों के सभी प्रकार से बचाएंगे। उपयोगकर्ता खाते को बदलने के साथ रखरखाव के मुद्दे मेरी राय में प्रयास के लायक नहीं हैं, और एक सेवा या निर्धारित नौकरी की स्थापना के दौरान दर्द होता है, यह सिर्फ एक बेहतर डिजाइन है। एएसपी.नेट पेज को आउटपुट के लिए परिणाम कतार मतदान करना चाहिए और आप उपयोगकर्ता को प्रतीक्षा पृष्ठ के साथ प्रस्तुत कर सकते हैं। यह ज्यादातर मामलों में स्वीकार्य है।


प्रश्न / उत्तर / उपरोक्त सभी टिप्पणियों के लिए धन्यवाद। मैं इस पर आया जब मैं WKHTMLtoPDF के लिए अपना स्वयं का सी # रैपर लिख रहा था और उसने मेरी कुछ समस्याओं का उत्तर दिया। मैंने ब्लॉग पोस्ट में इसके बारे में लिखना समाप्त कर दिया - जिसमें मेरा रैपर भी शामिल है (आपको कोई संदेह नहीं होगा कि मेरे कोड में ऊपर की प्रविष्टियों से "प्रेरणा" ...)

http://icanmakethiswork.blogspot.de/2012/04/making-pdfs-from-html-in-c-using.html

फिर से धन्यवाद दोस्तों!


मुझे एक ही समस्या थी जब मैंने विंडोज़ सेवा के साथ एमएसएमक का उपयोग करने की कोशिश की लेकिन कुछ कारणों से यह बहुत धीमी थी। (प्रक्रिया भाग)।

अंततः यह काम करता है:

private void DoDownload()
{
    var url = Request.Url.GetLeftPart(UriPartial.Authority) + "/CPCDownload.aspx?IsPDF=False?UserID=" + this.CurrentUser.UserID.ToString();
    var file = WKHtmlToPdf(url);
    if (file != null)
    {
        Response.ContentType = "Application/pdf";
        Response.BinaryWrite(file);
        Response.End();
    }
}

public byte[] WKHtmlToPdf(string url)
{
    var fileName = " - ";
    var wkhtmlDir = "C:\\Program Files\\wkhtmltopdf\\";
    var wkhtml = "C:\\Program Files\\wkhtmltopdf\\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 10mm --margin-bottom 10mm --margin-right 10mm --margin-left 10mm ";
    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;
}

धन्यवाद ग्राहम एम्ब्रोस और हर कोई।


using System;
using System.Diagnostics;
using System.Web;

public partial class pdftest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    private void fn_test()
    {
        try
        {
            string url = HttpContext.Current.Request.Url.AbsoluteUri;
            Response.Write(url);
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = 
                @"C:\PROGRA~1\WKHTML~1\wkhtmltopdf.exe";//"wkhtmltopdf.exe";
            startInfo.Arguments = url + @" C:\test"
                 + Guid.NewGuid().ToString() + ".pdf";
            Process.Start(startInfo);
        }
        catch (Exception ex)
        {
            string xx = ex.Message.ToString();
            Response.Write("<br>" + xx);
        }
    }
    protected void btn_test_Click(object sender, EventArgs e)
    {
        fn_test();
    }
}






wkhtmltopdf