前端自主實現將vue頁面轉為pdf文件下載

1.vue 轉 PDF

在 Vue 項目中將 HTML 頁面轉換為 PDF 文件是一個常見需求,特別是在需要生成報告或打印頁面時。本文將介紹如何使用?html2canvas?和?jspdf?庫實現這一功能。

2.安裝依賴

首先,我們需要安裝兩個庫:html2canvas?和?jspdf?。可以使用以下命令安裝:

npm install html2canvas
npm install jspdf --save

3.創建轉換函數

?utils?文件夾下創建一個?htmlToPdf.js?文件,并編寫以下代碼:

import html2Canvas from 'html2canvas';
import jsPDF from 'jspdf';const htmlToPdf = {
getPdf(title) {
html2Canvas(document.querySelector('#pdfDom'), {//這里pdfDom就是你打印/下載頁面區域的div的id
allowTaint: false,
taintTest: false,
logging: false,
useCORS: true,
dpi: window.devicePixelRatio * 4, // 提高分辨率
scale: 4 // 按比例增加分辨率
}).then(canvas => {
const pdf = new jsPDF('p', 'mm', 'a4'); // A4 紙,縱向
const ctx = canvas.getContext('2d');
const a4w = 190, a4h = 277; // A4 大小,四邊各保留 10mm 邊距
const imgHeight = Math.floor(a4h * canvas.width / a4w);
let renderedHeight = 0;while (renderedHeight < canvas.height) {
const page = document.createElement('canvas');
page.width = canvas.width;
page.height = Math.min(imgHeight, canvas.height - renderedHeight);
page.getContext('2d').putImageData(ctx.getImageData(0, renderedHeight, canvas.width, Math.min(imgHeight, canvas.height - renderedHeight)), 0, 0);
pdf.addImage(page.toDataURL('image/jpeg', 1.0), 'JPEG', 10, 10, a4w, Math.min(a4h, a4w * page.height / page.width));
renderedHeight += imgHeight;
if (renderedHeight < canvas.height) {
pdf.addPage();
}
}
pdf.save(title + '.pdf');    //這里title可以改為你下載pdf文件時的默認文件名
});
}
};export default htmlToPdf;

4.在vue組件中使用

需要生成 PDF 的 Vue 組件中引用并使用上述函數。首先,在組件中引入?htmlToPdf?

import htmlToPdf from '@/utils/htmlToPdf';

然后,在模板中添加一個包含需要轉換內容的?div,并設置一個按鈕來觸發 PDF 生成

<div id="pdfDom">    這里的 id 要和 htmlToPdf 函數中你寫的id保持一致
<!-- 這里是你需要打印/轉為pdf文件下載的頁面內容 -->
</div>
<div class="preview-content-operateBtn">
<button class="previewBtn" @click="onClickDownLoad">下載 PDF 簡歷</button>
</div>

在按鈕的點擊方法中調用?htmlToPdf.getPdf?函數

methods: {    //這里以vue2的選項式代碼示例onClickDownLoad() {htmlToPdf.getPdf('下載名稱');}
}

解決常見問題:

  1. 模糊問題:通過放大 canvas 尺寸和調整 DPI 來解決。

  2. 頁邊距問題:在生成 PDF 時預留頁邊距。

  3. 跨域圖片問題:將圖片轉換為 base64 格式,避免跨域錯誤。

通過以上步驟,我們可以在 Vue 項目中輕松實現 HTML 轉 PDF 的功能,并解決常見的模糊、頁邊距和跨域圖片問題。

本文僅供個人學習使用記錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86364.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TCP 堅持定時器詳解:原理、配置與最佳實踐?

一、TCP 堅持定時器基礎原理 1.1 堅持定時器的設計目的 TCP 堅持定時器 (TCP Persist Timer) 是 TCP 協議中用于處理接收窗口為零情況的重要機制&#xff0c;其核心設計目的是防止 TCP 連接在窗口更新 ACK 丟失時陷入死鎖狀態。當 TCP 連接的接收方通告一個窗口大小為 0 的 A…

大廠測開實習和小廠開發實習怎么選

先說選擇&#xff0c;這個可以百分百確定選大廠&#xff0c;title很重要。 要想弄清楚那個選擇對自己最有利&#xff0c;可以思考下實習的意義是什么&#xff1f; 實習無非就是給簡歷加分&#xff0c;拿到好offer&#xff0c;高薪offer。 那這就需要思考&#xff0c;簡歷怎么讓…

Unity中的urp和普通的標準渲染管線區別在哪

Unity中的URP&#xff08;Universal Render Pipeline&#xff09;與內置標準渲染管線&#xff08;Built-in Render Pipeline&#xff09;的區別深刻反映了Unity渲染技術的演進方向。以下從架構、性能、功能、工作流等多個維度進行深度分析&#xff1a; 1. 底層架構與設計哲學 標…

Vscode 編寫Markdown支持 plantuml書寫

1&#xff1a; 下載PlantUml 插件&#xff1a; 2&#xff1a; 安裝java https://www.oracle.com/java/technologies/downloads/ 3&#xff1a; 安裝Graphviz https://graphviz.org/download/ 4&#xff1a; 下載plantuml.jar https://plantuml.com/zh/download 5&…

設計模式(C++/Qt)-工廠模式

在軟件開發中&#xff0c;對象創建是基礎但關鍵的任務——工廠模式提供了一種優雅的解決方案&#xff0c;讓您的代碼擺脫硬編碼的依賴關系 一、為什么需要工廠模式&#xff1f; 在C/Qt開發中&#xff0c;我們經常面臨這樣的困境&#xff1a; 對象創建邏輯分散在代碼各處新增…

Pydantic 模型

本文將詳細介紹 Pydantic 模型 和 BaseModel 的核心概念&#xff0c;并通過實際代碼示例如何從零開始編寫自己的 Pydantic 模型。 1. Pydantic 是什么&#xff1f; Pydantic 是一個 Python 庫&#xff0c;主要用于&#xff1a; 數據驗證&#xff1a;確保輸入數據符合預期的類…

【Unity智能模型系列】MediaPipeUnityPlugin 實現人臉數據獲取

目錄 一、MediaPipeUnity 簡介 二、MediaPipeUnity 的核心組成 1. Graph 構建系統 2. 解決方案類(Solution) 3. 解釋注釋Annotation 系統 三、MediaPipeUnity 的典型使用流程 四、典型示例解析 1、案例 Face Detection圖形人臉檢測 2、案例 Face Detection圖形人臉檢…

iOS App 上架步驟解析:適合資源有限團隊的上架流程與注意事項

對于不少創業型或初創階段的開發團隊來說&#xff0c;人員配置緊湊、設備有限是常態。在這種背景下&#xff0c;完成一次合規、高效的iOS應用發布往往不是技術難點&#xff0c;而是流程協同與資源調配的問題。 我們是一支5人團隊&#xff0c;開發一款社交類工具型App&#xff…

Redis雪崩、穿透、擊穿原理及解決方案

以下是 Redis 緩存穿透、擊穿與雪崩的原理及解決方案的深度解析&#xff0c;結合工業級實踐整理&#xff1a; &#x1f50d; ?一、問題原理與區別? ?問題類型??觸發條件??核心特征??危害??緩存穿透?查詢?不存在的數據?繞過緩存直擊數據庫&#xff0c;導致無效查…

DFX 動態重構的概念和實現

DFX 動態重構的概念和實現 背景介紹 本文內容當前僅限于XILINX或者和XILINX具有相同結構的FPGA器件。 FPGA 技術提供了在現場進行編程和重新編程的靈活性&#xff0c;而無需通過重新制造流程來實現設計修改。動態功能交換&#xff08;Dynamic Function eXchange, DFX&#x…

hutool 導出數據報錯:org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException

Excel 導出報錯 org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : The part /docProps/core.xml failed to be saved in the stream with marshaller org.apache.poi.openxml4j.opc.internal.marsh…

【學習】win 本地部署qwen3

這里寫自定義目錄標題 環境搭建下載Ollama安裝olama修改模型下載位置&#xff08;可以不設置&#xff09;通過ollama下載/啟動模型常用命令其他 環境搭建 下載Ollama 安裝olama 默認安裝位置是c盤 安裝到指定位置使用以下命令 OllamaSetup.exe /DIR"d:\Ollama"修改…

python的__init__.py

在此之前先確認一個概念是否弄清 模塊命名空間 1. 目錄結構 假設你有以下結構&#xff1a; testpkg/__init__.pyfool.pymaybe.py內容如下&#xff1a; fool.py # testpkg/fool.py class Fool:passmaybe.py # testpkg/maybe.py class Maybe:pass__init__.py &#xff08…

四核 A53+工業級存儲:移遠 SC200L 與 pSLC SD NAND 如何重構 T-BOX 性能邊界?

博客目錄 一、移遠 SC200L&#xff1a;T-BOX 的 “智慧大腦”二、米客方德 MKDN064GIL-ZA T-BOX&#xff1a;數據安全的堅固堡壘三、深度協同&#xff1a;拓展 T-BOX 應用邊界 在車聯網浪潮席卷而來的當下&#xff0c;T-BOX 作為汽車與外界交互的核心樞紐&#xff0c;其性能優劣…

JavaEE-統一功能處理

攔截器 實現強制登錄的功能, 后端程序根據Session來判斷??是否登錄, 但是實現?法是?較?煩的 需要修改每個接?的處理邏輯 需要修改每個接?的返回結果 接?定義修改, 前端代碼也需要跟著修改 有沒有更簡單的辦法, 統?攔截所有的請求, 并進?Session校驗呢, 這?我們學…

vscode運行c++文件和插件的方法

1.運行c文件全過程 VSCode運行C全教程-CSDN博客 按照以上的操作即可完成正常的配置流程。但是在運行我的文件時&#xff0c;總是出現終端和輸出混亂的情況&#xff0c;我想要在終端中進行輸入輸出的話&#xff0c;需要加一個改動&#xff1a;設置--輸入Run In Terminal--勾選…

利用云效實現自動化部署gitee倉庫中的項目

本文主要介紹如何利用云效 實現Node項目&#xff08;vue/react....&#xff09;自動化部署 1.準備工作 Git 倉庫【Gitee】 云服務器【華為云】 你的項目 2. 創建目錄 服務器上創建兩個目錄 一個專門用來放壓縮包&#xff1a; /home/www/dist &#xff08;aaa.tgz bbb.tgz&am…

Flink SourceFunction深度解析:數據輸入的起點與奧秘

在Flink的數據處理流程中&#xff0c;StreamGraph構建起了作業執行的邏輯框架&#xff0c;而數據的源頭則始于SourceFunction。作為Flink數據輸入的關鍵組件&#xff0c;SourceFunction負責從外部數據源讀取數據&#xff0c;并將其轉換為Flink作業能夠處理的格式。深入理解Sour…

LabVIEW 共享變量通訊方式

在LabVIEW 開發中&#xff0c;共享變量&#xff08;SharedVariable&#xff09;作為實現數據實時交換的關鍵技術&#xff0c;廣泛應用于 LabVIEW、PLC 編程、分布式 SCADA 系統等領域。解析主流共享變量通訊機制的技術原理、性能特性及工程實踐中的選型策略。? 一、Network -P…

Angular進階之十二:Chrome DevTools+Angular實戰診斷指南

引言 最近有一個工單是說用戶在使用我們的系統的時候&#xff0c;如果使用某個頁面的次數多了以后瀏覽器就開始變慢甚至卡死崩潰掉。這個問題明顯是提示有內存泄露&#xff0c;今天就由這個問題開始分享一些關于內存泄漏的知識。 一、 Web 應用內存泄漏的危害與易忽略性 危害&…