アイデア: html2canvas を使用して HTML ページを画像に変換し、次に jspdf を使用して画像の base64 を PDF ファイルに生成します。 1. インストールと導入//ページのHTMLを画像に変換します npm install html2canvas --save // 画像からPDFを生成する npm インストール jspdf --save 定義した実装方法を導入し、プロジェクトのメインファイルmain.jsに登録する '@/utils/htmlToPdf' から htmlToPdf をインポートします。 // Vue.use() メソッドを使用すると、ツール メソッド Vue.use(htmlToPdf) のインストール メソッドが呼び出されます。 ポータル: Vue における Vue.use() の原理と使用法 2. PDFファイルをパッケージ化してエクスポートする方法構成の詳細pdf = new jsPDF('p', 'pt', [pdfX, pdfY]); とします。 最初のパラメーター: l: 水平、p: 垂直。 2 番目のパラメーター: 測定単位 ("pt"、"mm"、"cm"、"m"、"in"、または "px")。 3 番目のパラメータ: 次の形式にすることができます。デフォルトは "a4" です。カスタム形式の場合は、サイズを数値配列として渡すだけです (例: [592.28, 841.89])。 a0 - a10 b0 - b10 c0 - c10 ダウンロード 手紙 政府からの手紙 法律上の ジュニアリーガル 元帳 タブロイド クレジットカード pdf.addPage() は PDF ドキュメントに新しいページを追加します。デフォルトのサイズは a4 です。パラメータは次のとおりです。 pdf.addImage() は PDF に画像を追加します。パラメータは次のとおりです。 PDFのページを削除する let targetPage = pdf.internal.getNumberOfPages(); // 合計ページ数を取得する pdf.deletePage(targetPage); // 対象ページを削除する PDF文書を保存 pdf.save(`test.pdf`); PDF ファイルをエクスポートするメソッドをカプセル化します (utils/htmlToPdf.js)// ページを PDF 形式でエクスポートする import html2Canvas from 'html2canvas' 'jspdf' から JsPDF をインポートします エクスポートデフォルト{ インストール (Vue, オプション) { Vue.prototype.getPdf = 関数(){ // PDF をダウンロードするときに、ページの先頭にない場合は PDF スタイルが正しくなくなるため、ページの先頭に戻ってからダウンロードします。let top = document.getElementById('pdfDom'); (トップ!= null)の場合{ 上部にスクロールしてビューに移動します。 上部 = null; } title = this.exportPDFtitle とします。 html2Canvas(document.querySelector('#pdfDom'), { 汚染を許可: true }).then(関数(キャンバス) { // キャンバスの幅と高さを取得します。let contentWidth = canvas.width; contentHeight を canvas.height に設定します。 // HTML ページを表示する PDF ページによって生成されるキャンバスの高さ。 pageHeight = contentWidth / 841.89 * 592.28 とします。 //PDF を生成しない HTML ページの高さ let leftHeight = contentHeight; // ページオフセット let position = 0; // PDF 内の HTML ページによって生成されたキャンバス イメージの幅と高さ (この場合: 横長の A4 用紙 [841.89, 592.28]、縦のサイズを変更する必要があります) imgWidth = 841.89 とします。 imgHeight = 841.89 / contentWidth * contentHeight とします。 pageData = canvas.toDataURL('image/jpeg', 1.0); とします。 PDF = new JsPDF('l', 'pt', 'a4'); とします。 // 2 つの高さを区別する必要があります。1 つは HTML ページの実際の高さで、もう 1 つは生成された PDF ページの高さです。// コンテンツが 1 つの PDF ページの範囲を超えない場合、ページングは必要ありません if (leftHeight < pageHeight) { PDF.addImage(pageData, 'JPEG', 0, 0, 画像幅, 画像高さ) } それ以外 { (左の高さ > 0)の間{ PDF.addImage(pageData, 'JPEG', 0, 位置, 画像幅, 画像高さ) 左の高さ -= ページの高さ; ポジション -= 592.28; // 空白ページの追加を避ける if (leftHeight > 0) { PDF.addPage(); } } } PDF.save(タイトル + '.pdf') }) } } } 関連コンポーネントへの応用<テンプレート> <div class="wrap"> <div id="pdfDom" スタイル="padding: 10px;"> <el-テーブル :data="テーブルデータ" 境界線> <el-table-column prop="date" label="日付" width="250"></el-table-column> <el-table-column prop="name" label="姓名" width="250"></el-table-column> <el-table-column prop="address" label="住所"></el-table-column> </el-table> </div> <button type="button" style="margin-top: 20px;" @click="btnClick">PDF をエクスポート</button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ データ() { 戻る { exportPDFtitle: "ページエクスポートPDFファイル名", テーブルデータ: [ { 日付: '2016-05-06'、 名前: 王小湖、 住所: 重慶市九龍坡区火居大道 }, { 日付: '2016-05-07'、 名前: 王小湖、 住所: 重慶市九龍坡区火居大道 },{ 日付: '2016-05-03'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-02'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-04'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-01'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-08'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-07'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-01'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-08'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-07'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: '南京市江寧区江君大道' }, { 日付: '2016-05-07'、 名前: 王小湖、 住所: '南京市江寧区江君大道' },, { 日付: '2016-05-04'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-01'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-08'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-07'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' },{ 日付: '2016-05-01'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-08'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: '上海市普陀区金沙江路1518号' }, { 日付: '2016-05-08'、 名前: 王小湖、 住所: 武漢市紅山区文化大道 }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: 武漢市紅山区文化大道 }, { 日付: '2016-05-07'、 名前: 王小湖、 住所: 武漢市紅山区文化大道 }, { 日付: '2016-05-06'、 名前: 王小湖、 住所: '南京市江寧区江君大道' }, { 日付: '2016-05-07'、 名前: 王小湖、 住所: 武漢市紅山区文化大道 }, ] } }, メソッド: { btnClick(){ this.$nextTick(() => {this.getPdf();}) }, }, } </スクリプト> 効果最適化する部品
要約するこれで、Vue フロントエンドで PDF を生成してダウンロードする方法に関するこの記事は終了です。Vue フロントエンドで PDF を生成してダウンロードする方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Nginx アクセス ログとエラー ログ パラメータの説明
>>: HTML入力ファイルコントロールはアップロードされるファイルの種類を制限します
以前、動的フォームを記述しているときに落とし穴に遭遇しました。インデックスの添え字をキーとして使用す...
目次posgresql バックアップ/リストアMySQL バックアップ/復元posgresql バッ...
コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...
必要:近い将来、大容量ファイルのアップロード機能を実装します。フロントエンドフレームワークのアップロ...
1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...
CSS レイアウト - position プロパティposition 属性は、要素に適用する配置方法...
1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...
この記事では、JD.comのカルーセル効果の表示を実現するためのJavaScriptの具体的なコード...
目次1. 基本を理解する2. システム環境を確認する3. ftpコマンドをインストールする[オプショ...
目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...
1. SVNサーバーをインストールする yum でサブバージョンをインストール2. SVNバージョン...
Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...
1. cuda10.1をダウンロードします。 NVIDIA 公式ウェブサイト リンク: https:...
遭遇した落とし穴私は午後中ずっと、uni-app で scss を使用する際の落とし穴を解決すること...
MySQL データベースがエラー 1045 (28000): ユーザー 'ODBC'...