JSは、HTMLおよびPDFのダウンロードを生成します

JSであなたと共有し、今日にHTMLや知識のPDFダウンロードを生成します。

1 html2canvas

はじめに
私たちは、ブラウザで直接全部または一部のページ「のショットを。」html2canvasを使用することができます しかし、これは実際に撮影していないが、すべての要素と対応するスタイルに収集情報へのDOM構造を、横断キャンバス画像をレンダリングすることによってページ。
html2canvasのみが扱うことができるキャンバス画像を生成し、したがって結果は、元と100%一致しないレンダリングすることができるからです。しかし、それは参加するサーバーを必要としない、全体像は非常に簡単に使用する、クライアントのブラウザによって生成されます。

使用する
APIの使用は非常に簡単で、次のコードでは、キャンバスとしてレンダリング要素とすることができます。

html2canvas(element, {onrendered: function(canvas) {
        // canvas is the final rendered <canvas> element
    }
});

キャンバスは、ページに挿入するように、onrenderedコールバックメソッドによって生成することができます。

html2canvas(element, {onrendered: function(canvas) {
       document.body.appendChild(canvas);
    }
});

次のように小さい(DEMO1)コードする実施例である:<HTML>

 <head>
    <title>html2canvas example</title>
    <style type="text/css">...</style>
  </head>
  <body>
    <header>
      <nav>
        <ul>
          <li>one</li>
          ...
        </ul>
      </nav>
    </header>
    <section>
      <aside>
        <h3>it is a title</h3>
        <a href="">Stone Giant</a>
        ...
     </aside>
      <article>
        <img src="./Stone.png">
        <h2>Stone Giant</h2>
        <p>Coming ... </p>
        <p>以一团石头...</p>
      </article>
    </section>
    <footer>write by linwalker @2017</footer>
    <script type="text/javascript" src="./html2canvas.js"></script>
    <script type="text/javascript">
        html2canvas(document.body, {
          onrendered:function(canvas) {
            document.body.appendChild(canvas)
          }
        })
</script>
  </body>
</html>

本文ページの要素のこの実施例は、キャンバスに描画され、体内に挿入されます。

2 jsPDF

jsPDFライブラリブラウザは、PDFを生成するために使用することができます。

テキストPDF生成
、次の方法を使用しました:

// 默认a4大小,竖直方向,mm单位的PDF
var doc = new jsPDF();
// 添加文本‘Download PDF’
doc.text('Download PDF!', 10, 10);
doc.save('a4.pdf');

画像のPDF生成
、次の方法を使用しました:

// 三个参数,第一个方向,第二个单位,第三个尺寸格式
var doc = new jsPDF('landscape','pt',[205, 115])
// 将图片转化为
dataUrlvar imageData = ‘data:image/png;base64,iVBORw0KGgo...;
doc.addImage(imageData, 'PNG', 0, 0, 205, 115);
doc.save('a4.pdf');

テキストと画像PDFを生成:

// 三个参数,第一个方向,第二个尺寸,第三个尺寸格式
var doc = new jsPDF('landscape','pt',[205, 155])
// 将图片转化为
dataUrlvar imageData = ‘data:image/png;base64,iVBORw0KGgo...;
//设置字体大小
doc.setFontSize(20);
//10,20这两参数控制文字距离左边,与上边的距离
doc.text('Stone', 10, 20);
// 0, 40, 控制文字距离左边,与上边的距离
doc.addImage(imageData, 'PNG', 0, 40, 205, 115);
doc.save('a4.pdf')

jsPDFインスタンスに変換生成する要素を追加したPDFの必要性、追加のHTML機能がありますが、いくつかの要素がPDFで生成することができない、PDFにhtml2canvas + jsPDF方法のページを使用することが可能です。

html2canvasによってページ要素を横断し、キャンバスで描画し、jsPDFインスタンスにキャンバス画像フォーマットを追加し、PDFを生成します。

3 html2canvas + jsPDF

リーフレット
修飾のDEMO1例:

<script type="text/javascript" src="./js/jsPdf.debug.js">
</script><script type="text/javascript">      
var downPdf = document.getElementById("renderPdf");      
downPdf.onclick = function() {          
html2canvas(document.body, {              
onrendered:function(canvas) {                  
//返回图片dataURL,参数:图片格式和清晰度(0-1)                  
var pageData = canvas.toDataURL('image/jpeg', 1.0);      
 //方向默认竖直,尺寸ponits,格式a4[595.28,841.89]                 
  var pdf = new jsPDF('', 'pt', 'a4');                  
  //addImage后两个参数控制添加图片的尺寸,此处将页面高度按照a4纸宽高比列进行压缩                  
  pdf.addImage(pageData, 'JPEG', 0, 0, 595.28, 592.28/canvas.width * canvas.height ); 
    pdf.save('stone.pdf');              }          })      }
          </script>

A4、A4用紙の高さの変換比率に基づいて、ページのコンテンツは、それの高さを超えた場合、生成されたPDFはどうなりますか?ページングをしますか?

あなたは自分のアイデアをテストする、試すことができます。

jsPDF APIは、ディスプレイに画像PDFページを与え、その後に有用、のaddPage()、私たちはpdf.addPage()、追加することができ、PDF、pdf.addImage(...)を提供します。

だから、どのように我々はどこページネーションを決定するのですか?

さて、この質問に答えるために、我々は次のページのPDFにコンテンツの高さを超えて、のpageHeightを設定することができます。

彼の考えはストロークに、HTMLページのコンテンツキャンバスの絵を生成、PDFにaddImageページによって追加された最初の画像、1以上の内容、のaddPage()でPDFのページを追加し、addImageにより、次のページに画像を追加PDF。

〜ああ、よく!バートは、その問題が見つかりませんか?

ページaddImageの内部によって、我々は、最初の完全なページ生成されたコンテンツキャンバス画像、ニンジン対応のpageHeightに基づく小画像にピットを分割し、ページ - - このメソッドの実装の前提です。

?我々はキャンバスに腫れていると思う何を、以下で直接見て、プルアップはありません。

html2canvas(document.body, {
    onrendered:function(canvas) {
     //it is here we handle the canvas
    }
})

ここで、本体はcanvas要素オブジェクトを生成することで、キャンバスを生成するための要素と、それから私達はあるキャンバスものを、必要とします。

あなたが可能と思いますか?私も見つかった場合は、その後、(要素、オプション)htnl2canvasによって処理され、ページ上の異なる場所でDOM要素を取得するには、この考え方に基づいて、現実を考えていない、私はちょうど話さないだろうやるそれぞれのpageHeightの位置にあるだけでDOM要素を見つけることができません、そして疲れてそうします。

:)疲れて、あなたは、このアプローチを見てみることができます。

マルチページ
Iが提供するアイデアは、それはあなたが親要素のPDFの内容に変身したいという変換素子があるため、我々は唯一、キャンバスを生成することで、このデモでは体が存在し、他の変わらない、しかしのaddPageにも、複数のコンテンツそしてaddImageは、しかし、ここで追加したのと同じキャンバスです。

もちろん、複数ページのPDFファイルは、それだけで終わりで正しいページ表示を達成するためにどのように表示されます繰り返し。実際には、主な利点jsPDF二つの点:

  • jsPDF含有量よりもフォーマットサイズの例は、表示されていない(VARのPDF = newjsPDF( ''、 'PT' は、 'A4');は、用紙サイズがA4であるデモ)
  • addImage PDFで画像位置を制御するには、2つのパラメータがあります
    画像は、各ページのPDFファイルに表示されるものの、同じですが、私たちは絵の位置、妄想ページングを調整します。

2ページ目では、例えば、高さ-841.89すなわち紙A4、A4であり、垂直方向にオフセットに設けられても高さ範囲にわたって紙は、垂直方向の画像、2ページ目が表示画像が表示されないのでようにページングの影響を与え、そして[841.89,1682.78]の範囲内のコンテンツ。

またはコード、それを見て:

html2canvas(document.body, {
  onrendered:function(canvas) {
      var contentWidth = canvas.width;
      var contentHeight = canvas.height;
      //一页pdf显示html页面生成的canvas高度;
      var pageHeight = contentWidth / 592.28 * 841.89;
      //未生成pdf的html页面高度
      var leftHeight = contentHeight;
      //页面偏移
      var position = 0;
      //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
      var imgWidth = 595.28;
      var imgHeight = 592.28/contentWidth * contentHeight;
      var pageData = canvas.toDataURL('image/jpeg', 1.0);
      var pdf = new jsPDF('', 'pt', 'a4');
      //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
      //当内容未超过pdf一页显示的范围,无需分页
      if (leftHeight < pageHeight) {
      pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight );
      } else {
          while(leftHeight > 0) {
              pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
              leftHeight -= pageHeight;
              position -= 841.89;
              //避免添加空白页
              if(leftHeight > 0) {
                pdf.addPage();
              }
          }
      }
      pdf.save('content.pdf');
  }
})

マージン辺左
次のように変更imgWidth、あなたaddImageマージンに設定するX方向パラメータ、特定のコードを:

var imgWidth = 555.28;
var imgHeight = 555.28/contentWidth * contentHeight;
...
pdf.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight );
...
pdf.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight);

JSは、HTMLおよびPDFのダウンロードを生成について、あなたはどのくらいを学びますか?コメントは、コメント領域に歓迎されています!

公開された180元の記事 ウォン称賛13 ビュー7170

おすすめ

転載: blog.csdn.net/weixin_45794138/article/details/104883098