如何在 Vue 中使用 Chart.js - 手把手教你搭視覺化資料圖表
本文首發:《 如何在 Vue 中使用 Chart.js - 手把手教你搭視覺化資料圖表 》
很多 Vue 專案中都需要 PDF 檔案預覽功能,比如合同 ERP,銷售 CRM,內部文件 CMS 管理系統,內建 PDF 檔案線上預覽功能。本文手把手教你搭建一套 PDF 預覽元件嵌入到 Vue 專案中,實現 PDF 檔案線上預覽等 PDF 預覽的所有常見功能。
跟隨本教程學習完成後,你會搭出以下 PDF 線上預覽效果的 Vue PDF 預覽元件
如果你正在搭建後臺管理工具,又不想處理前端問題,推薦使用卡拉雲,卡拉雲是新一代低程式碼開發工具,可一鍵接入常見資料庫及 API ,無需懂前端,僅需拖拽即可快速搭建屬於你自己的後臺管理工具,一週工作量縮減至一天,詳見本文文末。
擴充套件閱讀《 12 款最棒 Vue 開源 UI 庫測評 - 特別針對國內使用場景推薦 》
第 2 步 - 下載並配置 PDF.js
npm install -g @vue/cli
vue create kalacloud-vue-pdfjs-viewer
cd kalacloud-vue-pdfjs-viewer
複製程式碼
接下來,我們所有操作都在 kalacloud-vue-pdfjs-viewer
這個目錄中完成。
第 2 步 - 下載並配置 PDF.js
配置好 Vue 專案後,我們先去PDF.js 官網下載最新的穩定版,PDF.js 是目前 PDF 線上預覽中最好的開源解決方案之一。我們把下載好的壓縮包解壓到 Vue 專案中的新建資料夾 public/lib
中。
然後在找一個 pdf 檔案放在資料夾的 web
資料夾中,一會我們用寫的 pdf 預覽元件來呼叫並預覽這個 PDF 檔案。
PDF.js 解壓後放在 public/lib
的目錄結構
public
├── lib
| ├── build
| ├── ...
| ├── web
| ├── my-pdf-file.pdf
| ├── ...
| ├── LICENSE
├── favicon.ico
└── index.html
複製程式碼
擴充套件閱讀《 vue.draggable 入門指南 - 手把手教你開發任務看板 》
第 3 步 - 建立 Vue PDF 預覽元件
接著,我們來建立 Vue PDF 預覽元件 - PDFJSViewer.vue
。我們把它放在 Vue 元件資料夾中。
在 src/components
資料夾中,新建 PDFJSViewer.vue
檔案,並把以下程式碼複製進去。
檔案位置: src/components/PDFJSViewer.vue
<template>
<div>
<iframe height="100%" width=100% :src="`${getFilePath}`" ></iframe>
</div>
</template>
<script>
export default {
name: 'PDFJSViewer',
props: {
fileName: String,
path:String
},
computed:{
getFilePath: function () {
if(this.fileName!==''){
return this.path +'?file=' + this.fileName
}
return this.path
}
}
}
</script>
<style scoped>
div {
width: 50%;
height: 79vh;
min-width: 400px;
}
</style>
複製程式碼
在元件 <template>
之中,繫結資料並將 DOM 渲染到 Vue 專案中。在 <script>
之中,我們聲明瞭 PDFJSViewer 為 Vue 專案元件,然後寫上需要載入的 PDF 檔案位置。
擴充套件閱讀《 最好用的 12 款 Vue Timepicker 時間日期選擇器測評推薦 》
第 4 步 - 匯入 Vue PDF 預覽元件
這一步,我們匯入 PDF 預覽元件,並在 Vue 專案中呼叫並顯示出來。
在 src/App.vue
中,我們先把剛剛寫的 PDFJSViewer 元件新增到 <template>
部分,以及把我們要載入預覽的 PDF 位置和檔名寫進去。
<template>
<div id="app">
<h1>Vue 實現 PDF 檔案線上預覽 - 卡拉雲(kalacloud.com)</h1>
<PDFJSViewer :path="`${path}`" :fileName="`${name}`"/>
</div>
</template>
複製程式碼
然後在 <script>
部分匯入 PDF 預覽元件。:
<script>
import PDFJSViewer from './components/PDFJSViewer'
export default {
name: 'app',
components: {
PDFJSViewer
},
data () {
return {
name: 'kalacloud-demo.pdf', // 這裡是需要預覽的 PDF 檔名
path: 'lib/web/viewer.html'
}
}
}
</script>
複製程式碼
現在執行 Vue 專案,應該已經能看到 PDF 預覽效果了。
擴充套件閱讀《 最棒的 7 個 Laravel admin 後臺管理系統推薦 》
第 5 步 - 自定義 PDF.js 工具欄
這一步是自定義 PDF.jd 預覽元件中頂部的工具條,你可以移動工具條中按鈕的位置,給他們換 icon,也可以隱藏某些你不想讓使用者使用的功能。
在 public/lib/web/viewer.html
檔案的 <head>
部分,新增以下程式碼:
檔案位置: public/lib/web/viewer.html
<script src="customToolbar.js"></script>
複製程式碼
接下來,我們在 public/lib/web
中新建一個 js 檔案 customToolbar.js
,並新增以下程式碼:
檔案位置: public/lib/web/customToolbar.js
//建立一個新樣式
let sheet = (function() {
let style = document.createElement("style");
style.appendChild(document.createTextNode(""));
document.head.appendChild(style);
return style.sheet;
})();
//調整頁面大小時,PDF 預覽元件會隱藏,開啟就會徹底隱藏所有功能變成一個純預覽工具。
//function editToolBar(){
//removeGrowRules();
//將功能按鈕放在工具欄左側
addElemFromSecondaryToPrimary('pageRotateCcw', 'toolbarViewerLeft')
addElemFromSecondaryToPrimary('pageRotateCw', 'toolbarViewerLeft')
addElemFromSecondaryToPrimary('zoomIn', 'toolbarViewerLeft')
addElemFromSecondaryToPrimary('zoomOut', 'toolbarViewerLeft')
//將功能按鈕放在工具欄中間
addElemFromSecondaryToPrimary('previous', 'toolbarViewerMiddle')
addElemFromSecondaryToPrimary('pageNumber', 'toolbarViewerMiddle')
addElemFromSecondaryToPrimary('numPages', 'toolbarViewerMiddle')
addElemFromSecondaryToPrimary('next', 'toolbarViewerMiddle')
//將功能按鈕放在工具欄右側
addElemFromSecondaryToPrimary('secondaryOpenFile', 'toolbarViewerRight')
// 更改功能按鈕的圖示
changeIcon('previous', 'icons/baseline-navigate_before-24px.svg')
changeIcon('next', 'icons/baseline-navigate_next-24px.svg')
changeIcon('pageRotateCcw', 'icons/baseline-rotate_left-24px.svg')
changeIcon('pageRotateCw', 'icons/baseline-rotate_right-24px.svg')
changeIcon('viewFind', 'icons/baseline-search-24px.svg');
changeIcon('zoomOut', 'icons/baseline-zoom_out-24px.svg')
changeIcon('zoomIn', 'icons/baseline-zoom_in-24px.svg')
changeIcon('sidebarToggle', 'icons/baseline-toc-24px.svg')
changeIcon('secondaryOpenFile', './icons/baseline-open_in_browser-24px.svg')
// 隱藏某些功能
removeElement('secondaryToolbarToggle')
removeElement('scaleSelectContainer')
removeElement('presentationMode')
removeElement('openFile')
removeElement('print')
removeElement('download')
removeElement('viewBookmark')
}
function changeIcon(elemID, iconUrl){
let element = document.getElementById(elemID);
let classNames = element.className;
classNames = elemID.includes('Toggle')? 'toolbarButton#'+elemID :
classNames.split(' ').join('.');
classNames = elemID.includes('view')? '#'+elemID+'.toolbarButton' : '.'+classNames
classNames+= "::before";
addCSSRule(sheet, classNames, `content: url(${iconUrl}) !important`, 0)
}
function addElemFromSecondaryToPrimary(elemID, parentID){
let element = document.getElementById(elemID);
let parent = document.getElementById(parentID);
element.style.minWidth = "0px";
element.innerHTML =''
parent.append(element);
}
function removeElement(elemID){
let element = document.getElementById(elemID);
element.parentNode.removeChild(element);
}
function removeGrowRules(){
addCSSRule(sheet, '.hiddenSmallView *', 'display:block !important');
addCSSRule(sheet, '.hiddenMediumView', 'display:block !important');
addCSSRule(sheet, '.hiddenLargeView', 'display:block !important');
addCSSRule(sheet, '.visibleSmallView', 'display:block !important');
addCSSRule(sheet, '.visibleMediumView', 'display:block !important');
addCSSRule(sheet, '.visibleLargeView', 'display:block !important');
}
function addCSSRule(sheet, selector, rules, index) {
if("insertRule" in sheet) {
sheet.insertRule(selector + "{" + rules + "}", index);
}
else if("addRule" in sheet) {
sheet.addRule(selector, rules, index);
}
}
window.onload = editToolBar
複製程式碼
到這裡,我們已經完全配置好了 PDF 預覽元件,執行 Vue 專案,你會看到以下效果:
總結
本文介紹瞭如何在 Vue 中實現 PDF 預覽功能。如果不想處理前端問題,推薦使用卡拉雲,卡拉雲內建各類元件,無需懂任何前端,僅需拖拽即可快速生成。
下圖為使用卡拉雲搭建的內部廣告投放監測系統,僅需拖拽,1 小時搞定。
卡拉雲是新一代低程式碼開發工具,免安裝部署,可一鍵接入包括 MySQL 在內的常見資料庫及 API。可根據自己的工作流,定製開發。無需繁瑣的前端開發,只需要簡單拖拽,即可快速搭建企業內部工具。 原來三天的開發工作量,使用卡拉雲後可縮減至 1 小時,歡迎免費 試用卡拉雲 。
擴充套件閱讀:
- 拒絕八股文!這篇圖解動態路由分分鐘愛了
- 從使用者走向引領者,如何加速國產開源生態建設?
- Docker 實踐經驗(二)映象的構建、映象倉庫、壓縮、匯入
- 雲原生之 Ansible 篇(一)
- ElastricSearch 第二彈之分片原理
- 超影片時代音影片架構建設與演進
- 騰訊內容結算下一代系統探索實踐
- 10 分鐘,帶你瞭解 3 篇 SIGMOD、WWW 等資料庫頂會論文的研究成果
- Java 近期新聞:NetBeans 14、Spring Tool Suite 3 支援接近尾聲、Hibernate 6.1、TornadoVM
- 打破焦慮,分析師是如何研判技術趨勢的?
- 最小可行架構實踐:構建家庭保險聊天機器人
- MobTech 楊冠軍:管理是一生的提煉,數字是一生的總結 | TGO 專訪
- StackOverflow 2022 年度調查報告:JavaScript 連續霸榜,Java 被擠出前五,Rust 最受歡迎
- Kafka ETL 之後,我們將如何定義新一代實時資料整合解決方案?
- Linux 之父發話:Rust 即將出現在 Linux 核心中
- 程式猿必備的數電知識,快來看看你掌握多少!(建議收藏)
- 保險產品 SaaS 化實踐之路(上)
- PerfDog 創始人 Awen 邀您共話移動產品質量管理之道
- spring4.1.8 擴充套件實戰之七:控制 bean(BeanPostProcessor 介面)
- PyTorch 分散式訓練原來可以更高效