Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 最近中文字幕完整版视频在线看,nu77亚洲综合日韩精品,国产精品麻豆免费版

          整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          HTML問題:如何實現(xiàn)分享URL預覽?

          端功能問題系列文章,點擊上方合集↑

          序言

          大家好,我是大澈!

          本文2100+,整篇閱讀大約需要3分鐘。

          本文主要內容分三部分,如果您只需要解決問題,請閱讀第一、二部分即可。如果您有更多時間,進一步學習問題相關知識點,請閱讀至第三部分。

          感謝關注微信公眾號:“程序員大澈”,然后加入問答群,從此讓解決問題的你不再孤單!

          、前端實現(xiàn)pdf文件在線預覽功能

          方式一、pdf文件理論上可以在瀏覽器直接打開預覽但是需要打開新頁面。在僅僅是預覽pdf文件且UI要求不高的情況下可以直接通過a標簽href屬性實現(xiàn)預覽

          <a href="文檔地址"></a>
          

          方式二、通過jquery插件jquery.media.js實現(xiàn) 這個插件可以實現(xiàn)pdf預覽功能(包括其他各種媒體文件)但是對word等類型的文件無能為力。 實現(xiàn)方式: js代碼:

          <script type="text/javascript" src="jquery-1.7.1.min.js"></script> 
          <script type="text/javascript" src="jquery.media.js"></script>
          復制代碼
          

          html結構:

           <body>
           <div id="handout_wrap_inner"></div>
           </body>
          復制代碼
          

          調用方式:

          <script type="text/javascript"> 
           $('#handout_wrap_inner').media({
          		width: '100%',
          		height: '100%',
          		autoplay: true,
           src:'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf',
           }); 
          </script>
          復制代碼
          

          方式三、直接通過頁面內嵌iframe

          $("<iframe src='"+ this.previewUrl +"' width='100%' height='362px' frameborder='1'>").appendTo($(".video-handouts-preview"));
          復制代碼
          

          此外還可以在iframe標簽之間提供一個提示類似這樣

          <iframe :src="previewUrl" width="100%" height="100%">
          This browser does not support PDFs. Please download the PDF to view it: <a :href="previewUrl">Download PDF</a>
          </iframe>
          復制代碼
          

          方式四、通過標簽嵌入內容

          <embed :src="previewUrl" type="application/pdf" width="100%" height="100%">
          

          此標簽h5特性中包含四個屬性:高、寬、類型、預覽文件src! 與< iframe > < / iframe > 不同,這個標簽是自閉合的的,也就是說如果瀏覽器不支持PDF的嵌入,那么這個標簽的內容什么都看不到!

          方式五、標簽和iframe使用差別較小

          <object :src="previewUrl" width="100%" height="100%">
          This browser does not support PDFs. Please download the PDF to view it: <a :href="previewUrl">Download PDF</a>
          </object>
          復制代碼
          

          除方式二以外其他都是直接通過標簽將內容引入頁面實現(xiàn)預覽

          方式六、PDFObject

          PDFObject實際上也是通過標簽實現(xiàn)的直接上代碼

          <!DOCTYPE html>
          <html>
          <head>
           <title>Show PDF</title>
           <meta charset="utf-8" />
           <script type="text/javascript" src='pdfobject.min.js'></script>
           <style type="text/css">
           html,body,#pdf_viewer{
           width: 100%;
           height: 100%;
           margin: 0;
           padding: 0;
           }
           </style>
          </head>
          <body>
           <div id="pdf_viewer"></div>
          </body>
          <script type="text/javascript">
           if(PDFObject.supportsPDFs){
           // PDF嵌入到網(wǎng)頁
           PDFObject.embed("index.pdf", "#pdf_viewer" );
           } else {
           location.href = "/canvas";
           }
          </script>
          </html>
          

          還可以通過以下代碼進行判斷是否支持PDFObject預覽

          if(PDFObject.supportsPDFs){
           console.log("Yay, this browser supports inline PDFs.");
          } else {
           console.log("Boo, inline PDFs are not supported by this browser");
          }
          復制代碼
          

          方式七、PDF.js

          PDF.js可以實現(xiàn)在html下直接瀏覽pdf文檔,是一款開源的pdf文檔讀取解析插件,非常強大,能將PDF文件渲染成Canvas。PDF.js主要包含兩個庫文件,一個pdf.js和一個pdf.worker.js,一個負責API解析,一個負責核心解析。

          2、word、xls、ppt文件在線預覽功能

          word、ppt、xls文件實現(xiàn)在線預覽的方式比較簡單可以直接通過調用微軟的在線預覽功能實現(xiàn) (預覽前提:資源必須是公共可訪問的)

          <iframe src='https://view.officeapps.live.com/op/view.aspx?src=http://storage.xuetangx.com/public_assets/xuetangx/PDF/1.xls' width='100%' height='100%' frameborder='1'>
          			</iframe>
          復制代碼
          

          src就是要實現(xiàn)預覽的文件地址 具體文檔看這微軟接口文檔

          補充:google的文檔在線預覽實現(xiàn)同微軟(資源必須是公共可訪問的)

          <iframe :src="'https://docs.google.com/viewer?url="fileurl"></iframe>
          復制代碼
          

          3、word文件

          XDOC可以實現(xiàn)預覽以DataURI表示的DOC文檔,此外XDOC還可以實現(xiàn)文本、帶參數(shù)文本、html文本、json文本、公文等在線預覽,具體實現(xiàn)方法請看官方文檔

          下面這種方式可以實現(xiàn)快速預覽word但是對文件使用的編輯器可能會有一些限制

          <a  target="_blank" rel="nofollow">XDOC</a>
          復制代碼
          

          4、excel文件

          目前excel文件已經(jīng)有了類似pdf.js那樣的解析sheet.js

          總結:

          1、免費純前端方式實現(xiàn)在線預覽word、excel、ppt最優(yōu)選擇微軟在線預覽(不可編輯)

          2、利用后端將文件轉為圖片,前端以圖片形式預覽(可行方案)

          3、購買在線預覽服務例如百度DOC文檔服務、永中、I DOC VIEW等

          著名:文章內容是從網(wǎng)上搜集資料所得;在次發(fā)表只為自己以及頭條程序員兄弟日后使用圖個方便。

          覺得有用記得收藏轉發(fā)!

          端實現(xiàn)文件預覽功能

          ?

          需求:實現(xiàn)一個在線預覽pdf、excel、word、圖片等文件的功能。
          介紹:支持pdf、xlsx、docx、jpg、png、jpeg。
          以下使用Vue3代碼實現(xiàn)所有功能,建議以下的預覽文件標簽可以在外層包裹一層彈窗。

          ?

          圖片預覽

          iframe標簽能夠將另一個HTML頁面嵌入到當前頁面中,我們的圖片也能夠使用iframe標簽來進行展示。

          <iframe  :src="圖片地址"
                   style="z-index: 1000; height:650px; width: 100%; margin: 0 auto"
                   sandbox="allow-scripts allow-top-navigation allow-same-origin allow-popups"
          >
          

          「sandbox」這個屬性如果是單純預覽圖片可以不使用,該屬性對呈現(xiàn)在 iframe 框架中的內容啟用一些額外的限制條件。屬性值可以為空字符串(這種情況下會啟用所有限制),也可以是用空格分隔的一系列指定的字符串。

          • allow-scripts: 允許嵌入的瀏覽上下文運行腳本(但不能創(chuàng)建彈窗)。如果沒有使用該關鍵字,就無法運行腳本。
          • allow-top-navigation: 允許將框架內所加載頁面中的超鏈接導航到父級窗口
          • allow-same-popups: 允許彈窗 (例如 window.open, target="_blank")。如果沒有使用該關鍵字,相應的功能將自動被禁用。
          • allow-same-origin: 如果沒有使用該關鍵字,嵌入的瀏覽上下文將被視為來自一個獨立的源,這將使 same-origin policy 同源檢查失敗。使用了這個屬性,那么當前頁面和iframe打開的頁面視為同源。

          word文檔預覽(docx)

          先下載npm包
          npm i docx-preview --save
          
          <div class="docxRef"></div>
          
          <script>
          import { renderAsync } from 'docx-preview';
          
          function fn() {
          // 這里的res.data是 blob文件流,如果自己的不是blob文件流
          // 可以通過URL.createObjectURL(參數(shù)) 參數(shù)為File格式,轉換為blob文件流
              let blob = res.data
              let childRef = document.getElementsByClassName('docxRef');
              renderAsync(blob, childRef[0]) //渲染
          }
          fn()
          
          </script>
          

          「blob文件流」

          預覽excel文件(xlsx)

          下載包
          npm install xlsx@0.16.0
          
          <div class="xlsxClass"></div>
          const reader = new FileReader();
          //通過readAsArrayBuffer將blob轉換為ArrayBuffer對
          reader.readAsArrayBuffer(res.data) // 這里的res.data是blob文件流
          reader.onload = (event) => {
            // 讀取ArrayBuffer數(shù)據(jù)變成Uint8Array
            var data = new Uint8Array(event.target.result);
            // 這里的data里面的類型和后面的type類型要對應
            var workbook = XLSX.read(data, { type: "array" });
            var sheetNames = workbook.SheetNames; // 工作表名稱
            var worksheet = workbook.Sheets[sheetNames[0]];
            // var excelData = XLSX.utils.sheet_to_json(worksheet); //JSON
            let html = XLSX.utils.sheet_to_html(worksheet);
            document.getElementsByClassName('xlsxClass')[0].innerHTML = html
          };
          
          

          pdf預覽

          下載包 npm install pdfjs-dist
          我使用的是npm install pdfjs-dist@2.0.943版本,以下例子使用的是vue3+vite創(chuàng)建的項目
          以下例子通過canvas來渲染pdf
          
          <template>
            <div class="box">
              <div class="tool-bar">
                <div>{{ pdfParams.pageNumber }} / {{ pdfParams.total }}</div>
                <button type="primary" :disabled="pdfParams.pageNumber == pdfParams.total" @click="nextPage">下一頁
                </button>
                <button type="primary" :disabled="pdfParams.pageNumber == 1" @click="prevPage">上一頁</button>
              </div>
              <canvas id="pdf-render"></canvas>
            </div>
          </template>
          
          
          <script setup>
          import { onMounted, ref, reactive } from 'vue'
          const pdfParams = reactive({
            pageNumber: 1, // 當前頁
            total: 0, // 總頁數(shù)
          });
          
          // 不要定義為ref或reactive格式,就定義為普通的變量
          let pdfDoc = null;
          // 這里必須使用異步去引用pdf文件,直接去import會報錯,也不知道為什么
          onMounted(async ()=> {
            let pdfjs = await import('pdfjs-dist/build/pdf')
            let pdfjsWorker = await import('pdfjs-dist/build/pdf.worker.entry')
            pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker
            // 此文件位于public/test2.pdf
            let url = ref('/test2.pdf')
            pdfjs.getDocument(url.value).promise.then(doc => {
              pdfDoc = doc
              pdfParams.total = doc.numPages
              getPdfPage(1)
            })
          })
          
          // 加載pdf的某一頁
          const getPdfPage = (number) => {
            pdfDoc.getPage(number).then(page => {
              const viewport = page.getViewport()
              const canvas = document.getElementById('pdf-render')
              const context = canvas.getContext('2d')
              canvas.width = viewport.viewBox[2]
              canvas.height = viewport.viewBox[3]
              viewport.width = viewport.viewBox[2]
              viewport.height = viewport.viewBox[3]
              canvas.style.width = Math.floor(viewport.width) + 'px'
              canvas.style.height = Math.floor(viewport.height) + 'px'
          
              let renderContext = {
                canvasContext: context,
                viewport: viewport,
                // 這里transform的六個參數(shù),使用的是transform中的Matrix(矩陣)
                transform: [1, 0, 0, -1, 0, viewport.height]
              }
              // 進行渲染
              page.render(renderContext)
            })
          }
          // 下一頁功能
          const prevPage = () => {
            if(pdfParams.pageNumber > 1) {
              pdfParams.pageNumber -= 1
            } else {
              pdfParams.pageNumber  = 1
            }
            getPdfPage(pdfParams.pageNumber)
          }
          // 上一頁功能
          const nextPage = () => {
            if(pdfParams.pageNumber < pdfParams.total) {
              pdfParams.pageNumber += 1
            } else {
              pdfParams.pageNumber = pdfParams.total
            }
            getPdfPage(pdfParams.pageNumber)
          }
          </script>
          

          以上pdf代碼引用文章:(54條消息) 前端pdf預覽、pdfjs的使用_pdf.js_無知的小菜雞的博客-CSDN博客
          pdfjs官方代碼:例子 (mozilla.github.io)
          以上代碼看不懂的地方可以查閱官方代碼,大部分都是固定的寫法。

          「以上注意點:」

          • 必須異步引用pdf的文件?。。?/span>
          • pdf演示文件位于public/test2.pdf
          • transform: [1, 0, 0, -1, 0, viewport.height],使用了transform中的Matrix(矩陣)
          • 下一頁和上一頁功能都需要重新渲染

          主站蜘蛛池模板: 国产日韩精品一区二区在线观看| 91video国产一区| 男人的天堂av亚洲一区2区| 一夲道无码人妻精品一区二区| 国产天堂一区二区综合| 精品少妇一区二区三区在线| 色妞AV永久一区二区国产AV| 人妻无码一区二区不卡无码av| 亚洲国产日韩在线一区| 在线观看国产一区亚洲bd| 国产激情精品一区二区三区| 国产日韩精品一区二区三区在线| 色偷偷av一区二区三区| 无码国产精品一区二区免费| 精品国产一区二区三区AV | 国产丝袜美女一区二区三区| 无码囯产精品一区二区免费 | 久久精品一区二区国产| 91一区二区视频| 国产伦一区二区三区免费| 久久精品中文字幕一区| 亚洲国产韩国一区二区| 国产视频一区二区在线观看| 国产在线无码视频一区二区三区| 精品国产一区AV天美传媒| 国产在线无码视频一区| 看电影来5566一区.二区| 日本国产一区二区三区在线观看 | 好吊妞视频一区二区| 日韩综合无码一区二区| 无码中文字幕人妻在线一区二区三区 | 亚洲中文字幕久久久一区| 亚洲国产一区二区三区| 亚洲高清日韩精品第一区| 一区二区在线视频观看| 国产乱码一区二区三区| 亚洲A∨精品一区二区三区| 精品少妇ay一区二区三区| 欧洲精品无码一区二区三区在线播放| 国内精品一区二区三区东京| 亚洲日本一区二区三区在线 |