前端處理導出PDF。Vue導出pdf

前言:該篇主要是解決一些簡單的頁面內容導出為PDF

1.安裝依賴

使用到兩個依賴,項目目錄下運行這兩個

//頁面轉換成圖片
npm install --save html2canvas 
//圖片轉換成pdf
npm install jspdf --save 

2.創建通用工具類exportPdf.js文件

可以保存在工具類目錄下;

// 導出頁面為PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'export function getPdf(title, id) {// 參數校驗if (!title || !id) {console.error('Title and ID are required.')return}const element = document.querySelector(`#${id}`)if (!element) {console.error(`Element with ID "${id}" not found.`)return}html2Canvas(element, {allowTaint: true,useCORS: true,scale: 2}).then(function (canvas) {const contentWidth = canvas.widthconst contentHeight = canvas.height// A4紙尺寸 (單位: pt)const a4Width = 595.28const a4Height = 841.89// 設置外邊距 (單位: pt)const marginLeft = 20const marginTop = 20const marginRight = 20const marginBottom = 20// 計算可用內容區域const availableWidth = a4Width - marginLeft - marginRightconst availableHeight = a4Height - marginTop - marginBottom// 計算縮放比例,使內容寬度適配可用區域const scale = availableWidth / contentWidth// 按比例計算圖像在頁面上的尺寸const imgWidth = contentWidth * scaleconst imgHeight = contentHeight * scale// 計算每頁可容納的高度(考慮上下邊距)const pageHeight = availableHeightlet leftHeight = imgHeightlet position = 0const pageData = canvas.toDataURL('image/jpeg', 0.95)const PDF = new JsPDF('', 'pt', 'a4')if (leftHeight < pageHeight) {// 內容高度小于頁面可用高度,直接添加圖片(帶外邊距)PDF.addImage(pageData, 'JPEG', marginLeft, marginTop, imgWidth, imgHeight)} else {// 內容高度大于頁面可用高度,分頁處理while (leftHeight > 0) {// 添加當前頁面圖像(帶外邊距)PDF.addImage(pageData, 'JPEG', marginLeft, marginTop + position, imgWidth, imgHeight)leftHeight -= pageHeightposition -= a4Height// 如果還有剩余內容,添加新頁面if (leftHeight > 0) {PDF.addPage()}}}PDF.save(title + '.pdf')}).catch(function (error) {console.error('PDF導出失敗:', error)})
}

3.Demo例子

<template><div><!-- 容器 --><div id="pdfHtml" ref="printHtml"><h1>這是一個Demo。</h1></div><button @click="exportPDF">PDF導出</button></div>
</template>
<script>
import { getPdf } from '@/utils/exportPdf';
export default {methods: {// 導出pdfexportPDF() {getPdf('關鍵因素', 'pdfHtml');}}
}
</script>

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

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

相關文章

【GM3568JHF】FPGA+ARM異構開發板燒錄指南

1. Windows燒錄說明 SDK 提供 Windows 燒寫工具(工具版本需要 V3.31或以上)&#xff0c;工具位于工程根目錄&#xff1a; tools/ ├── windows/RKDevTool 如下圖&#xff0c;編譯生成相應的固件后&#xff0c;設備燒寫需要進入 MASKROM 或 LOADER 燒寫模式&#xff0c;準備…

C++ 多進程編程深度解析【C++進階每日一學】

文章目錄一、引言二、核心概念&#xff1a;進程 (Process)功能與作用三、C 多進程的實現方式四、核心函數詳解1. fork() - 創建子進程函數原型功能說明返回值完整使用格式2. wait() 和 waitpid() - 等待子進程結束函數原型參數與返回值詳解3. exec 系列函數 - 執行新程序函數族…

一周學會Matplotlib3 Python 數據可視化-繪制面積圖(Area)

鋒哥原創的Matplotlib3 Python數據可視化視頻教程&#xff1a; 2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程講解利用python進行數據可視化 科研繪圖-Matplotlib&#xff0c;學習Matplotlib圖形參數基本設置&…

北京JAVA基礎面試30天打卡11

1.索引創建注意事項 適合的場景 1.頻繁使用where語句查詢的字段 2.關聯字段需要建立索 3.如果不創建索引&#xff0c;那么在連接的過程中&#xff0c;每個值都會進行一次全表掃描 4.分組和排序字段可以建立索引因為索引天生就是有序的&#xff0c;在分組和排序時優勢不言而喻 5…

vscode無法檢測到typescript環境解決辦法

有一個vitereacttypescript項目&#xff0c;在工作電腦上一切正常。但是&#xff0c;在我家里的電腦運行&#xff0c;始終無法檢測到typescript環境。即使出現錯誤的ts語法&#xff0c;也不會有報錯提示&#xff0c;效果如下&#xff1a;我故意將一個string類型&#xff0c;傳入…

【MCP開發】Nodejs+Typescript+pnpm+Studio搭建Mcp服務

MCP服務支持兩種協議&#xff0c;Studio和SSE/HTTP&#xff0c;目前官方提供的SDK有各種語言。 開發方式有以下幾種&#xff1a; 編程語言MCP命令協議發布方式PythonuvxSTUDIOpypiPython遠程調用SSE服務器部署NodejspnpmSTUDIOpnpmNodejs遠程調用SSE服務器部署… 一、初始化項…

vscode使用keil5出現變量跳轉不了和搜索全局不了

vscode使用keil5出現變量跳轉不了&#xff0c;或者未包含文件&#xff0c;或者未全局檢索&#xff1b; 參考如下文章后還會出現&#xff1b; 為什么vscode搜索欄只搜索已經打開的文件_vscode全局搜索只能搜當前文件-CSDN博客 在機緣巧合之下發現如下解決方式&#xff1a; 下載…

命名空間——網絡(net)

命名空間——網絡&#xff08;net&#xff09; 一、網絡命名空間&#xff1a;每個都是獨立的“網絡房間” 想象你的電腦是一棟大樓&#xff0c;每個網絡命名空間就是大樓里的一個“獨立房間”&#xff1a; 每個房間里有自己的“網線接口”&#xff08;網卡&#xff09;、“門牌…

一文讀懂16英寸筆記本的實際尺寸與最佳應用場景

當您搜索"16寸筆記本電腦長寬"時&#xff0c;內心真正在問的是什么&#xff1f;是背包能否容納&#xff1f;桌面空間是否足夠&#xff1f;還是期待屏幕尺寸與便攜性的完美平衡&#xff1f;這個看似簡單的尺寸數字背后&#xff0c;凝結著計算機制造商對用戶體驗的深刻…

Android Studio中創建Git分支

做一些Android項目時&#xff0c;有時候想要做一些實驗性的修改&#xff0c;這個實驗可能需要很多步驟&#xff0c;所以不是一時半會能完成的&#xff0c;這就需要在實驗的過程中不斷修改代碼&#xff0c;且要提交代碼&#xff0c;方便回滾或比較差異&#xff0c;但是既然是實驗…

內存可見性和偽共享問題

文章目錄什么是內存可見性問題為什么會出現可見性問題解決可見性問題的方法1. 使用volatile關鍵字2. 使用synchronized3. 使用java.util.concurrent包下的原子類什么是偽共享問題CPU緩存行偽共享的危害解決偽共享的方法1. 緩存行填充2. 使用Contended注解&#xff08;JDK 8&…

Spring MVC 九大組件源碼深度剖析(三):ThemeResolver - 動態換膚的奧秘

文章目錄一、主題機制的核心價值二、核心接口設計三、四大實現類源碼解析1. FixedThemeResolver&#xff08;固定主題策略&#xff09;2. CookieThemeResolver&#xff08;Cookie存儲策略&#xff09;3. SessionThemeResolver&#xff08;Session存儲策略&#xff09;4. Abstra…

一、Docker本地安裝

((這里引用知乎上大佬的說法&#xff1a;https://www.zhihu.com/question/48174633 服務器虛擬化解決的核心問題是資源調配&#xff0c;而容器解決的核心問題是應用開發、測試和部署。 一、參考帖子 Ubuntu 的 |Docker 文檔 【docker】ubuntu完全卸載docker及再次安裝_ubuntu…

LeetCode 分類刷題:2962. 統計最大元素出現至少 K 次的子數組

題目給你一個整數數組 nums 和一個 正整數 k 。請你統計有多少滿足 「 nums 中的 最大 元素」至少出現 k 次的子數組&#xff0c;并返回滿足這一條件的子數組的數目。子數組是數組中的一個連續元素序列。示例 1&#xff1a;輸入&#xff1a;nums [1,3,2,3,3], k 2 輸出&#…

10分鐘掌握swift

整理一個 10分鐘掌握 Swift 的精華指南&#xff0c;用一個 Demo 串聯 Swift 的核心語法、數據結構、函數、類/結構體和閉包&#xff0c;讓你快速入門。1?? 基礎語法與變量import Foundation // 引入基礎庫// 變量和常量 var name: String "Alice" // 可變 let…

【完整源碼+數據集+部署教程】食品分類與實例分割系統源碼和數據集:改進yolo11-AggregatedAttention

背景意義 研究背景與意義 隨著全球食品產業的快速發展&#xff0c;食品安全和質量控制日益成為社會關注的焦點。食品分類與實例分割技術的應用&#xff0c;能夠有效提升食品識別的準確性和效率&#xff0c;為食品監管、營養分析以及智能餐飲等領域提供重要支持。傳統的食品識別…

C# 中的N+1問題

目錄 含義 影響 避免方法 1. 立即加載&#xff08;Eager Loading&#xff09; 2. 顯式加載&#xff08;Explicit Loading&#xff09; 3. 投影&#xff08;Projection&#xff09; 4. 批處理查詢 5. 禁用延遲加載 含義 N1 問題 是 ORM&#xff08;對象關系映射&#x…

國內多光譜相機做得好的廠家有哪些?-多光譜相機品牌廠家

多光譜相機是一種能夠同時捕捉多個特定波段的光譜信息&#xff0c;這些波段覆蓋可見光、近紅外以及短波紅外等區域。廣泛應用于遙感、農業、環境監測、工業檢測、安防等領域。近年來&#xff0c;我國在多光譜技術領域取得了顯著進步&#xff0c;涌現出一批技術實力強、產品性能…

如何用外部電腦訪問本地網頁?

之前本來說用內網穿透工具來查看完成這個工具&#xff0c;結果感覺各種不符合心意&#xff0c;突然發現有更簡單的方法。如果想讓兩臺電腦在 同一局域網 內都能訪問運行在 http://localhost:5174/ 上的項目&#xff0c;而不需要使用內網穿透工具&#xff0c;可以通過以下方法實…

PromptPilot — AI 自動化任務的下一個環節

作者:陳大魚頭 github:https://github.com/KRISACHAN 郵箱:chenjinwen77@gmail.com PromptPilot 體驗地址:https://promptpilot.volcengine.com/ 前言 如果大家有關注 AI 相關新聞的話,一定會知道在 2025 年 6 月 11 日火山引擎 FORCE 原動力大會上,豆包大模型 1.6 系列…