JsPDF लाइब्रेरी का सही उपयोग कैसे करें


84

मैं अपने कुछ डिव को पीडीएफ में बदलना चाहता हूं और मैंने jsPDF लाइब्रेरी की कोशिश की है, लेकिन कोई सफलता नहीं मिली। ऐसा लगता है कि मुझे समझ नहीं आ रहा है कि लाइब्रेरी का काम करने के लिए मुझे क्या आयात करना होगा। मैं उदाहरणों के माध्यम से गया हूँ और मैं अभी भी इसका पता नहीं लगा सकता। मैंने निम्नलिखित कोशिश की है:

<script type="text/javascript" src="js/jspdf.min.js"></script>

JQuery और के बाद:

$("#html2pdf").on('click', function(){
    var doc = new jsPDF();
    doc.fromHTML($('body').get(0), 15, 15, {
        'width': 170
    });
    console.log(doc);
});

परीक्षण के प्रयोजनों के लिए लेकिन मुझे प्राप्त होता है:

"Cannot read property '#smdadminbar' of undefined"

#smdadminbarशरीर से पहला तलाक कहां है


वह जो मेरे लिए काम करता है github.com/devrajatverma/jsPdfExample
रजत

1
उन सभी के लिए ध्यान दें, जो यह पता लगाने की कोशिश कर रहे हैं fromHTMLकि यह jsPDF डॉक्स में क्यों दर्ज नहीं किया गया है: " हम इस मुद्दे को बंद कर रहे हैं, क्योंकि हम HTML और addHTML से कोई समर्थन नहीं करेंगे। " ( मुद्दे से # 516 )
torititte

जवाबों:


133

आप html से pdf का उपयोग इस प्रकार कर सकते हैं,

चरण 1: शीर्ष लेख को हेडर में जोड़ें

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>

या स्थानीय रूप से डाउनलोड करें

चरण 2: jsPDF कोड निष्पादित करने के लिए HTML स्क्रिप्ट जोड़ें

पहचानकर्ता को पास करने के लिए इसे कस्टमाइज़ करें या केवल आपकी पहचान के लिए #content बदलें।

 <script>
    function demoFromHTML() {
        var pdf = new jsPDF('p', 'pt', 'letter');
        // source can be HTML-formatted string, or a reference
        // to an actual DOM element from which the text will be scraped.
        source = $('#content')[0];

        // we support special element handlers. Register them with jQuery-style 
        // ID selector for either ID or node name. ("#iAmID", "div", "span" etc.)
        // There is no support for any other type of selectors 
        // (class, of compound) at this time.
        specialElementHandlers = {
            // element with id of "bypass" - jQuery style selector
            '#bypassme': function (element, renderer) {
                // true = "handled elsewhere, bypass text extraction"
                return true
            }
        };
        margins = {
            top: 80,
            bottom: 60,
            left: 40,
            width: 522
        };
        // all coords and widths are in jsPDF instance's declared units
        // 'inches' in this case
        pdf.fromHTML(
            source, // HTML string or DOM elem ref.
            margins.left, // x coord
            margins.top, { // y coord
                'width': margins.width, // max width of content on PDF
                'elementHandlers': specialElementHandlers
            },

            function (dispose) {
                // dispose: object with X, Y of the last line add to the PDF 
                //          this allow the insertion of new lines after html
                pdf.save('Test.pdf');
            }, margins
        );
    }
</script>

चरण 3: अपने शरीर की सामग्री जोड़ें

<a href="javascript:demoFromHTML()" class="button">Run Code</a>
<div id="content">
    <h1>  
        We support special element handlers. Register them with jQuery-style.
    </h1>
</div>

मूल ट्यूटोरियल देखें

एक कामकाजी बेला देखें


4
इसे पोस्ट करने के लिए धन्यवाद, लेकिन मैंने ऊपर (स्थानीय रूप से) सटीक कोड की कोशिश की और यह एक रिक्त पीडीएफ दस्तावेज़ उत्पन्न करता है। यह 1.11.0 के साथ बिल्कुल भी काम नहीं करता है, इसलिए मैंने उसी jquery संस्करण का उपयोग किया जैसे github.com/MrRio/jsPDF/blob/master/examples/js/jquery/…
user1063287

की कोशिश की अपने कोड @Well विशर इसकी मुझे निम्न त्रुटि दे रही है, पुस्तकालय फ़ाइल के लिए itdself - गुण अपरिभाषित jspdf.plugin.from_html.js की 'लंबाई' पढ़ा नहीं जा सकता: 500
लर्नर

1
हां यह वास्तव में अच्छा है ,,,, लेकिन जेएसपीडीएफ का आउटपुट मेरे टेबल तत्वों के एक अन्य तत्व के साथ अतिव्यापी है, मैं इसे कैसे हल कर सकता हूं? .... मैंने फोंट का आकार बदल दिया है और इसे लैंडस्केप मोड के रूप में बनाया है, मैंने कोशिश की अधिकांश संशोधन, लेकिन कुछ भी काम नहीं कर रहा है
सुधीर बेलागली

1
मैं केवल CloudFlare CDNs का उपयोग करके इस उदाहरण को प्राप्त करने में सक्षम था: <script src = " cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/… >> या" script src = " cdnjs.cloudflare.com /ajax/libs/jspdf/1.2.61/… > लेकिन मैं इस स्रोत का उपयोग करने की कठिनाई में योगदान देता हूं, मैं कोड स्रोत में सहमत, प्रलेखन और सामान्य बदलाव करता हूं। यहां तक ​​कि ये CDN (जो JSfiddle उपयोग) "डाउनलोड स्थानीय रूप से" लिंक @Well wisher संदर्भों से भिन्न हैं।
स्कॉट

1
@ देखें कि उन्होंने लिंक हटा दिया है
वेल विशर

17

आपको केवल इस लिंक की जरूरत है jspdf.min.js

इसमें सब कुछ है।

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>

2
धन्यवाद, यह मुझे पागल कर रहा था! Jspdf के डिबग संस्करण का उपयोग करते हुए काम किया, जहां किसी भी कॉन्फ़िगरेशन में अन्य संस्करण नहीं थे। हो सकता है कि minification किसी तरह इसे तोड़ रहा हो? या मैं गलत कर रहा हूं।
जोंकियोन

इसने वास्तव में मेरी मदद की। मैं मूल jspdf.js फ़ाइल का उपयोग कर रहा था और यह काम नहीं कर रहा था। Jspdf.debug.js का उपयोग करके काम किया।
फ्रांसिस्को क्विंटो

दिलचस्प है कि उत्पादन संस्करण क्यों काम नहीं कर रहा है ... मैंने html पृष्ठ में सभी प्लगइन्स को शामिल किया और अभी तक, केवल इस डिबग संस्करण ने मदद की।
इलटर

नमस्ते, मैंने यह कोशिश की, लेकिन मुझे त्रुटि मिलती है Error in function FileSaver@http://mrrio.github.io/jsPDF/dist/jspdf.debug.js:5875:18: get_URL(...).createObjectURL is not a function, वही बात अगर मैं बोवर संस्करण का उपयोग करता हूं। कोई सुराग?
dbr

GitHub पर नवीनतम संस्करण की जाँच करें और उसके अनुसार URL बदलें। नवीनतम 1.3.5 है।
pasx

8

यह आखिरकार मेरे लिए क्या किया (और एक विवाद चलाता है):

function onClick() {
  var pdf = new jsPDF('p', 'pt', 'letter');
  pdf.canvas.height = 72 * 11;
  pdf.canvas.width = 72 * 8.5;

  pdf.fromHTML(document.body);

  pdf.save('test.pdf');
};

var element = document.getElementById("clickbind");
element.addEventListener("click", onClick);
<h1>Dsdas</h1>

<a id="clickbind" href="#">Click</a>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.3/jspdf.min.js"></script>

और नॉकआउट जेएस झुकाव के लिए, थोड़ा बाध्यकारी:

ko.bindingHandlers.generatePDF = {
    init: function(element) {

        function onClick() {
            var pdf = new jsPDF('p', 'pt', 'letter');
            pdf.canvas.height = 72 * 11;
            pdf.canvas.width = 72 * 8.5;

            pdf.fromHTML(document.body);

            pdf.save('test.pdf');                    
        };

        element.addEventListener("click", onClick);
    }
};

क्या इस स्निपेट के लिए कुछ और है? जब मैं इसे चलाने की कोशिश करता हूं तो मुझे एक त्रुटि मिलती है जो इंगित करती है कि 'pdf.canvas' अपरिभाषित है। : "Uncaught TypeError सेट नहीं कर सकता संपत्ति 'ऊंचाई' अपरिभाषित की"
रयान गिब्स

पक्का नहीं आपका क्या मतलब है? स्निपेट एक ही कोड का उपयोग करके निष्पादित करता है। तो शायद आपके कार्यान्वयन में कुछ बंद है। क्या आप कंसोल (PDF) और आउटपुट साझा कर सकते हैं।
पीआईएम

यह एक कैशिंग मुद्दा या कुछ और रहा होगा, जब मैंने इसे अभी सांत्वना के साथ प्रयास किया था। () वहां, कोड सही तरीके से निष्पादित हुआ। मैं अभी भी खाली पृष्ठ जारी कर रहा हूं, लेकिन यह एक अलग कहानी है। धन्यवाद।
रयान गिब्स

मैं भी त्रुटि "संपत्ति पढ़ा नहीं कर सकते हैं 'addEventListener'"
मंजीत तेशरा

मैं इस jsPDF () लाइब्रेरी से प्यार कर रहा हूं। BTW अगर किसी और को यह उपयोगी लगता है तो मुझे पीडीएफ उत्पन्न होने के बाद कॉलबैक संलग्न करने के लिए सिंटैक्स का पता चला:pdf.save("myfile.pdf", function(){ alert("pdf generation/save finished!"); });
क्रिस्टोफर डी। एमर्सन

3

क्या आपको jspdf.plugin.from_html.js लाइब्रेरी का उपयोग नहीं करना चाहिए? मुख्य पुस्तकालय (jspdf.js) के अलावा, आपको "विशेष संचालन" (जैसे jspdf.plugin.addimage.js छवियों का उपयोग करने के लिए) के लिए अन्य पुस्तकालयों का उपयोग करना होगा। Https://github.com/MrRio/jsPDF की जाँच करें


3
Jspdf.source.js अन्य सभी पुस्तकालयों को शामिल करता है।
whossname

3

सबसे पहले, आपको एक हैंडलर बनाना होगा।

var specialElementHandlers = {
    '#editor': function(element, renderer){
        return true;
    }
};

फिर इस कोड को क्लिक इवेंट में लिखें:

doc.fromHTML($('body').get(0), 15, 15, {
    'width': 170, 
    'elementHandlers': specialElementHandlers
        });

var pdfOutput = doc.output();
            console.log(">>>"+pdfOutput );

यह मानते हुए कि आप पहले से ही डॉक चर घोषित कर चुके हैं। और फिर आपने फ़ाइल-प्लगिन का उपयोग करके इस पीडीएफ फाइल को सहेज लिया है।


3

नवीनतम संस्करण (1.5.3) के अनुसार fromHTML()अब कोई विधि नहीं है। इसके बजाय आपको jsPDF HTML प्लगइन का उपयोग करना चाहिए, देखें: https://rawgit.com/MrRio/jsPDF/master/docs/module-html.html#~html

इसके ठीक से काम करने के लिए आपको html2canvas लाइब्रेरी को भी जोड़ना होगा: https://github.com/niklasvh/html2canvas

JS (API डॉक्स से):

var doc = new jsPDF();   

doc.html(document.body, {
   callback: function (doc) {
     doc.save();
   }
});

आप DOM तत्व के संदर्भ में भी HTML स्ट्रिंग प्रदान कर सकते हैं।


Doesn't अब और भी काम करने लगता है - jQuery.Deferred अपवाद: doc.html कोई फ़ंक्शन नहीं है TypeError: doc.html कोई फ़ंक्शन नहीं है
DropHit

1

यह कैसे लागू होता है?

function onClick() {
  var pdf = new jsPDF('p', 'pt', 'letter');
  pdf.canvas.height = 72 * 11;
  pdf.canvas.width = 72 * 8.5;

  pdf.fromHTML(document.body);

  pdf.save('test.pdf');
};

var element = document.getElementById("clickbind");
element.addEventListener("click", onClick);
<h1>Dsdas</h1>

<a id="clickbind" href="#">Click</a>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.3/jspdf.min.js"></script>


Jdpsf का उपयोग करने के vuejs उदाहरण पोस्ट करने के लिए धन्यवाद
शेन जी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.