কীভাবে সঠিকভাবে জেএসপিডিএফ লাইব্রেরি ব্যবহার করবেন


88

আমি আমার কিছু ডিভগুলি পিডিএফে রূপান্তর করতে চাই এবং আমি জেএসপিডিএফ লাইব্রেরি চেষ্টা করেছি তবে কোনও সাফল্য নেই। দেখে মনে হচ্ছে লাইব্রেরির কাজটি করার জন্য আমার কী আমদানি করা দরকার তা বুঝতে পারি না। আমি উদাহরণগুলির মধ্যে দিয়েছি এবং আমি এখনও এটি বের করতে পারি না। আমি নিম্নলিখিত চেষ্টা করেছি:

<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
রজত

4
যারা এখানে আসার চেষ্টা করছেন fromHTMLবা jsPDF ডক্সে এটি নথিভুক্ত নয়, তাদের জন্য দ্রষ্টব্য: " আমরা এই সমস্যাটি বন্ধ করছি, কারণ আমরা এইচটিএমএল এবং অ্যাডএইচটিএমএল থেকে আর সমর্থন করব না। " ( ইস্যু # 516 থেকে )
টরাইট

উত্তর:


138

আপনি এইচটিএমএল থেকে নিম্নলিখিত হিসাবে পিডিএফ ব্যবহার করতে পারেন,

পদক্ষেপ 1: নিম্নলিখিত স্ক্রিপ্ট শিরোনামে যুক্ত করুন

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

অথবা স্থানীয়ভাবে ডাউনলোড করুন

পদক্ষেপ 2: জেএসপিডিএফ কোড সম্পাদন করতে এইচটিএমএল স্ক্রিপ্ট যুক্ত করুন

শনাক্তকারীকে পাস করার জন্য এটি কাস্টমাইজ করুন বা আপনার প্রয়োজনীয় সনাক্তকারী হতে # কনটেন্টটি পরিবর্তন করুন।

 <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
এটি পোস্ট করার জন্য ধন্যবাদ, তবে আমি উপরের সঠিক কোডটি চেষ্টা করেছি (স্থানীয়ভাবে) এবং এটি খালি পিডিএফ নথি তৈরি করে। এটি jquery 1.11.0 এর সাথে মোটেও কাজ করে না তাই আমি github.com/MrRio/jsPDF/blob/master/example/js/jquery/…
ব্যবহারকারীর 1063287

4
হ্যাঁ এটি সত্যিই ভাল ,,, তবে জেএসপিডিএফের আউটপুটটি আমার টেবিলের উপাদানগুলির সাথে অন্য একটি সামগ্রীর সাথে ওভারল্যাপ করছে, আমি কীভাবে এটি সমাধান করতে পারি? .... আমি ফন্টগুলির আকার পরিবর্তন করেছি এবং এটিকে ল্যান্ডস্কেপ মোড হিসাবে তৈরি করেছি, আমি চেষ্টা করেছি বেশিরভাগ পরিবর্তনগুলি, তবে কিছুই কাজ করছে না
সুধীর বেলাগলি

4
আমি কেবল ক্লাউডফ্লেয়ার সিডিএন ব্যবহার করে এই উদাহরণটি পেতে সক্ষম হয়েছি: <স্ক্রিপ্ট src = " cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/… > বা <স্ক্রিপ্ট src =" cdnjs.cloudflare.com /ajax/libs/jspdf/1.2.61/… > তবে আমি সম্মত, ডকুমেন্টেশন এবং কোড উত্সের সাধারণ প্রকরণগুলি এই প্লাগইনটি ব্যবহার করতে অসুবিধার ক্ষেত্রে অবদান রাখে। এমনকি এই সিডিএনগুলি (যা জেএসফিডাল ব্যবহার করে) উপরের "স্থানীয়ভাবে ডাউনলোড করুন" লিঙ্কটি থেকে @ ওল্ড বুদ্ধিমানের উল্লেখগুলি থেকে পৃথক।
স্কট

4
@ স্কট আমি তারা লিঙ্কটি সরিয়ে ফেলেছি
ওয়েল উইশার

4
আমি কীভাবে আমার সিএসএস শৈলীগুলি মুদ্রণ করতে পারি?
মাওয়াস

17

আপনার কেবল এই লিঙ্কটি jspdf.min.js প্রয়োজন

এটিতে এটি সমস্ত কিছু রয়েছে।

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

4
ধন্যবাদ, এটি আমাকে বাদাম চালাচ্ছিল! Jspdf এর ডিবাগ সংস্করণ ব্যবহার করে কাজ করেছে, যেখানে কোনও কনফিগারেশনের অন্যান্য সংস্করণগুলি তা করেনি। হয়তো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করে? বা আমি এটা ভুল করছি।
jookyone

এটি সত্যিই আমাকে সাহায্য করেছিল। আমি মূল jspdf.js ফাইলটি ব্যবহার করছিলাম এবং এটি কাজ করছে না। Jspdf.debug.js ব্যবহার করে কাজটি হয়েছে।
ফ্রান্সিসকো কুইন্টোর

আকর্ষণীয় কেন উত্পাদনের সংস্করণটি কাজ করছে না ... আমি এইচটিএমএল পৃষ্ঠায় সমস্ত প্লাগইন অন্তর্ভুক্ত করেছি এবং এখনও, কেবল এই ডিবাগ সংস্করণটি সহায়তা করেছিল।
ইল্টার

হাই, আমি এটি চেষ্টা করেছিলাম তবে আমি ত্রুটি পেয়েছি Error in function FileSaver@http://mrrio.github.io/jsPDF/dist/jspdf.debug.js:5875:18: get_URL(...).createObjectURL is not a function, একই জিনিস যদি আমি বোয়ার সংস্করণটি ব্যবহার করি। কোন সুত্র?
ডিবিআর

4
@omegastripes দেখে মনে হচ্ছে তারা উত্স আপডেট করেছে; https://unpkg.com/jspdf@latest/dist/jspdf.umd.min.js
আহমেট গোকদায়ি

9

অবশেষে এটিই আমার জন্য কী করেছিল (এবং একটি স্বভাবতই ট্রিগার করে):

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);
    }
};

এই স্নিপেট আরও কিছু আছে? যখন আমি এটি চালানোর চেষ্টা করি তখন আমি একটি ত্রুটি পাই যা ইঙ্গিত করে যে 'পিডিএফ.ক্যানভাস' অপরিজ্ঞাত। "আনকাচড টাইপ এরিয়ার: অপরিজ্ঞাতকৃত সম্পত্তিটির 'উচ্চতা' সেট করা যায় না"
রায়ান গিবস

আপনি কি বোঝাতে চেয়েছেন তা নিশ্চিত না? স্নিপেট একই কোড ব্যবহার করে কার্যকর করে। সুতরাং সম্ভবত আপনার বাস্তবায়ন কিছু বন্ধ আছে। আপনি কনসোল.লগ (পিডিএফ) এবং আউটপুট ভাগ করতে পারেন।
পিমে

এটি অবশ্যই একটি ক্যাশিং সমস্যা বা কিছু ছিল, যখন আমি এখনই কনসোল.লগ () এর মাধ্যমে এটি চেষ্টা করেছি, কোডটি সঠিকভাবে কার্যকর করা হয়েছিল। আমি এখনও ফাঁকা পৃষ্ঠা ইস্যু পাচ্ছি, তবে এটি অন্যরকম একটি গল্প। ধন্যবাদ
রায়ান গিবস

এছাড়াও আমার ত্রুটি আছে "সম্পত্তি 'অ্যাডভেন্টলিস্টনার' পড়তে পারছি না"
মনজিধা তিশারা

আমি এই jsPDF () লাইব্রেরি ভালবাসি। বিটিডাব্লু অন্য কেউ যদি এই দরকারীটি খুঁজে পায় আমি পিডিএফ তৈরির পরে চালানোর জন্য একটি কলব্যাক সংযুক্ত করার জন্য বাক্য গঠনটি সন্ধান করেছি:pdf.save("myfile.pdf", function(){ alert("pdf generation/save finished!"); });
ক্রিস্টোফার ডি এমারসন

5

সর্বশেষতম সংস্করণ (1.5 .3) অনুসারে fromHTML()এখন আর কোনও পদ্ধতি নেই। পরিবর্তে আপনার জেএসপিডিএফ এইচটিএমএল প্লাগইন ব্যবহার করা উচিত, দেখুন: https://rawgit.com/MrRio/jsPDF/master/docs/module-html.html#~html

সঠিকভাবে কাজ করার জন্য আপনাকে এইচটিএমএল 2 ক্যানভাস লাইব্রেরি যুক্ত করতে হবে: https://github.com/niklasvh/html2canvas

জেএস (এপিআই ডক্স থেকে):

var doc = new jsPDF();   

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

আপনি পাশাপাশি ডিওএম উপাদানটির রেফারেন্সের পরিবর্তে এইচটিএমএল স্ট্রিং সরবরাহ করতে পারেন।


হয় আর কাজ করে না বলে মনে হচ্ছে - jQuery.Dferfer ব্যতিক্রম: doc.html কোনও ফাংশন নয় TypeError: doc.html কোনও ফাংশন নয়
DropHit

3

আপনি কি jspdf.plugin.from_html.js লাইব্রেরি ব্যবহার করবেন না? মূল গ্রন্থাগার (jspdf.js) ছাড়াও, আপনাকে অবশ্যই "বিশেষ ক্রিয়াকলাপগুলির" জন্য (যেমন jspdf.plugin.addimage.js চিত্রগুলি ব্যবহারের জন্য) অন্যান্য গ্রন্থাগার ব্যবহার করতে হবে। পরীক্ষা করে দেখুন https://github.com/MrRio/jsPDF


4
Jspdf.source.js অন্যান্য লাইব্রেরির সমস্ত অন্তর্ভুক্ত বলে মনে হচ্ছে।
হোসনাম

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 );

ধরে নিচ্ছি আপনি ইতিমধ্যে ডক ভেরিয়েবল ঘোষণা করেছেন। এবং তারপরে আপনি ফাইল-প্লাগইন ব্যবহার করে এই পিডিএফ ফাইলটি সংরক্ষণ করবেন।


1

কিভাবে vuejs মধ্যে এটি প্রযোজ্য?

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>


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.