JSはどのようにHTMLページを複数ページPDFにエクスポートしますか?
3772 ワード
前の話
前にブログを書きました. JSはどのようにHTMLページをPDFにエクスポートしますか? . 当時はただ自分に必要なものがありました.PDFの一ページをエクスポートして、例を書きました.
その後、同級生からの私信があります.どのように複数のページのPDFを導出するかを聞きました.はい、実はこれらは文書を見て絵を描いて自分で書くことができます.今後も、HTMLを変換して複数ページのPDFをエクスポートする必要があるかもしれません.ライブラリを書くことにしました.
住所はここですhttps://github.com/pwcong/how-transform-html-into-multipage-pdf
原理
依存したから
文書を見ることによって、
ここで大体の手順を説明します.
まずPDFを導出するdivをcanvasとしてレンダリングし、canvasのピクチャurlデータを取得する.
style、class、idを設定すると
幅を設定
1 2 3 4 5 6 7 8 そのうち
前者が後者の説明より小さいなら、ページを分けずに直接に画像データを追加してエクスポートします.ソースは以下の通りです.
まずページ数を求める
個人の能力が足りないため、この方法はページ数が多すぎるPDFを導出する時(例えば20ページ以上)、明らかなブラウザのカートンがあります. そして何の最適化も行われていません.PDFは曖昧です.解決方法があれば、個人的に信頼できると思います.
そしてこの方法はちょっとdirty hackです.実は一番smart hackの方法は直接js実行関数です.
著作権声明:本文はブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません.https://blog.csdn.net/pwc1996/article/details/70141383
前にブログを書きました. JSはどのようにHTMLページをPDFにエクスポートしますか? . 当時はただ自分に必要なものがありました.PDFの一ページをエクスポートして、例を書きました.
その後、同級生からの私信があります.どのように複数のページのPDFを導出するかを聞きました.はい、実はこれらは文書を見て絵を描いて自分で書くことができます.今後も、HTMLを変換して複数ページのPDFをエクスポートする必要があるかもしれません.ライブラリを書くことにしました.
renderPDF
でしょう住所はここですhttps://github.com/pwcong/how-transform-html-into-multipage-pdf
原理
依存したから
jsPDF
このライブラリはPDFをエクスポートすると調べられます. jsPDF
関連文書を作成します文書を見ることによって、
jsPDF
新しいページを追加するAPI関数を提供します. addPage()
ですので、長すぎるdivのページを考慮して、それをめぐって考えます.ここで大体の手順を説明します.
まずPDFを導出するdivをcanvasとしてレンダリングし、canvasのピクチャurlデータを取得する.
content
新しいdivの名前は imgData
挿入 page
中:style、class、idを設定すると
body
一致した後、次のステップを継続する.幅を設定
content
の幅は、高度に設定されています.計算されたpageHeightのソースコードは以下の通りです.1 2 3 4 5 6 7 8 そのうち
content
事前定義されたオブジェクトのために、 pdfFormat
入力するPDFフォーマットその背景を設定します format
続いてcontentHeightとpageHeightを判断します.前者が後者の説明より小さいなら、ページを分けずに直接に画像データを追加してエクスポートします.ソースは以下の通りです.
var pdfProportion = pdfFormat[format][0] / pdfFormat[format][1];
var contentHeight = content.offsetHeight;
var contentWidth = content.offsetWidth;
var pageHeight = contentWidth / pdfProportion;
var pageWidth = contentWidth;
1 2 3 4 5 6 7 前者が後者より大きい場合は、改ページが必要です.まずページ数を求める
url(imgData)
,サイクル数は count
設定 count-1
の page
オフセット次にレンダリングpageがcanvasで画像urlデータを取得する. background
挿入 pageData
オブジェクトのうち、pdf
オブジェクトの実行 pdf
関数最後のページを追加します.最後のページの高さはaddPage()
サイズと一致しないかもしれないので、設定します. pageHeight
の高さを計算したものです. page
,canvasにレンダリングして画像データを取得して挿入する lastPageHeight
中エクスポート保存、ソースは以下の通りです. if(contentHeight < pageHeight){
pdf.addImage(imgData, 'JPEG', 0, 0,pdfFormat[format][0],pdfFormat[format][1]/pageHeight*contentHeight);
pdf.save(pdfName);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 最後に、`pdf
名前を削除 body
の page
後に書く個人の能力が足りないため、この方法はページ数が多すぎるPDFを導出する時(例えば20ページ以上)、明らかなブラウザのカートンがあります. そして何の最適化も行われていません.PDFは曖昧です.解決方法があれば、個人的に信頼できると思います.
そしてこの方法はちょっとdirty hackです.実は一番smart hackの方法は直接js実行関数です.
div
,エクスポート window.print()
効果も非常に良く、ブラウザの公式実装です.著作権声明:本文はブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません.https://blog.csdn.net/pwc1996/article/details/70141383