jsPDFライブラリを正しく使用する方法


84

divの一部をPDFに変換したいのですが、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本体からの最初のdivはどこですか。


私のために働いたものgithub.com/devrajatverma/jsPdfExample–
Rajat

1
ここに来fromHTMLて、jsPDFドキュメントに記載されていない理由を理解しようとしているすべての人に注意してください:「fromHTMLとaddHTMLはサポートされなくなるため、この問題を終了します。」(issue#516から
toraritte

回答:


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
これを投稿していただきありがとうございますが、上記の正確なコードを(ローカルで)試したところ、空白のPDFドキュメントが生成されました。jquery 1.11.0ではまったく機能しないため、github.com
MrRio / jsPDF /

コード@WellWisherを試しましたが、ライブラリファイルitdselfに対して次のエラーが発生しました-未定義のjspdf.plugin.from_html.js:500のプロパティ 'length'を読み取れません
学習者

1
はい、これは本当に良いです、、、しかし、JSPdfの出力は私のテーブル要素の別の要素と重複しています、どうすればそれを解決できますか?....フォントのサイズを変更して横向きモードにしたので、試しましたほとんどの変更、しかし何も機能していません
Sudhir Belagali 2016年

1
CloudFlare CDNを使用してのみこの例を機能させることができました:<script src = " cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/… >または< scriptsrc =" cdnjs.cloudflare.com /ajax/libs/jspdf/1.2.61/… >しかし、私は同意します。ドキュメントとコードソースの一般的なバリエーションが、このプラグインの使用の難しさに寄与しています。これらのCDN(JSfiddleが使用)でさえ、上記の「ローカルでダウンロード」リンク@Wellウィッシャーリファレンスとは異なります。
スコット

1
@Scott i彼らはリンクを削除しました
まあウィッシャー

17

このリンクだけが必要ですjspdf.min.js

それにはすべてが含まれています。

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

2
おかげで、これは私を狂わせていました!jspdfのデバッグバージョンの使用は機能しましたが、どの構成の他のバージョンも機能しませんでした。たぶん、ミニファイはどういうわけかそれを壊していますか?または私はそれを間違っています。
jookyone 2015年

これは本当に私を助けました。元のjspdf.jsファイルを使用していましたが、機能しませんでした。jspdf.debug.jsを使用して仕事をしました。
フランシスコキンテロ2015年

なぜ製品版が機能しないのか興味深い...私はすべてのプラグインをhtmlページに含めましたが、それでもこのデバッグバージョンだけが役に立ちました。
ilter 2015

こんにちは、私はこれを試しましたが、エラーが発生しますError in function FileSaver@http://mrrio.github.io/jsPDF/dist/jspdf.debug.js:5875:18: get_URL(...).createObjectURL is not a function。バウアーバージョンを使用した場合も同じです。どんな手掛かり?
dbr 2016年

GitHubで最新バージョンを確認し、それに応じて上記のURLを変更してください。最新は1.3.5です。
pasx 2018

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>

そして、KnockoutJS志向の人にとっては、少し拘束力があります。

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」が未定義であることを示すエラーが表示されます。「UncaughtTypeError:undefinedのプロパティ「height」を設定できません」
Ryan Gibbs

よく分からない?スニペットは同じコードを使用して実行されます。したがって、おそらく実装に何か問題があります。console.log(pdf)を作成して、出力を共有できますか。
pim 2018

それはキャッシュの問題か何かだったに違いありません。console.log()を入れて今試したところ、コードは正しく実行されました。まだ空白ページの問題が発生していますが、それは別の話です。ありがとう。
ライアンギブス

また、「プロパティ 'addEventListener'を読み取れません」という
ManjithaTeshara18年

私はこのjsPDF()ライブラリが大好きです。ところで、他の誰かがこれが便利だと思ったら、PDFが生成された後に実行するコールバックを添付するための構文を理解しました:pdf.save("myfile.pdf", function(){ alert("pdf generation/save finished!"); });
Christopher

3

jspdf.plugin.from_html.jsライブラリも使用するべきではありませんか?メインライブラリ(jspdf.js)に加えて、「特別な操作」のために他のライブラリを使用する必要があります(画像を使用するためのjspdf.plugin.addimage.jsなど)。https://github.com/MrRio/jsPDFを確認してください


3
jspdf.source.jsには、他のすべてのライブラリが含まれているようです。
whossname 2014

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

すでにdoc変数を宣言していると仮定します。そして、File-Pluginを使用してこのPDFファイルを保存しました。


3

最新バージョン(1.5.3)によると、fromHTML()メソッドはもうありません。代わりに、jsPDFHTMLプラグインを利用する必要があります。以下を参照してください。。httpsください。

また、正しく機能するためには、html2canvasライブラリを追加する必要があります:https//github.com/niklasvh/html2canvas

JS(APIドキュメントから):

var doc = new jsPDF();   

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

DOM要素への参照の代わりにHTML文字列を提供することもできます。


どちらも機能しなくなったようです-jQuery.Deferred例外:doc.htmlは関数ではありませんTypeError:doc.htmlは関数ではありません
DropHit

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>


使用jdpsfのvuejs例えば転記するためのおかげ
シェーンGを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.