整合營銷服務(wù)商

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

          免費咨詢熱線:

          基于HTML5轉(zhuǎn)換PDF的電子書閱讀插件

          存在閱讀要求的項目,一般都是以pdf.js插件閱讀PDF文件,但存在閱讀體驗不理想的情況,所以參考手機上的電子書閱讀器,使用國外的[鏈接描述][1]http://fliphtml5.com 制作電子書示例。

          最終效果

          效果如下

          代碼說明

          完整代碼已上傳git,標題搜索即可。

          插件功能強大,縮略圖,鼠標翻頁,放大縮小都可以,部分配置代碼config.js如下

          var bookConfig = {
          	appName:'flippdf',
          	totalPageCount : 0,
          	largePageWidth : 1080,
          	largePageHeight : 1440,
          	normalPath : "files/page/",
          	largePath : "files/large/",
          	thumbPath : "files/thumb/",
          	
          	ToolBarsSettings:"",
          	TitleBar:"",
          	appLogoLinkURL:"",
          	bookTitle:"FLIPBUILDER",
          	bookDescription:"",
          	ButtonsBar:"",
          	ShareButton:"",
          	
          	ThumbnailsButton:"",
          	ThumbnailsButtonVisible:"Hide",
          	ZoomButton:"",
          	ZoomButtonVisible:"No",
          	FlashDisplaySettings:"",
          	MainBgConfig:"",
          	bgBeginColor:"#cccccc",
          	bgEndColor:"#eeeeee",
          	bgMRotation:45,
          	pageBackgroundColor:"#FFFFFF",
          	flipshortcutbutton:"Hide",
          	BookMargins:"",
          	topMargin:10,
          	bottomMargin:10,
          	leftMargin:10,
          	rightMargin:10,
          	HTMLControlSettings:"",
          	linkconfig:"",
          	LinkDownColor:"#808080",
          	LinkAlpha:0.5,
          	OpenWindow:"_Blank",
          	BookMarkButtonVisible:'False',
          	productName : 'Demo created by Flip PDF',
          	homePage : 'http://www.html5.com/',
          	isFlipPdf : "False",
          	TableOfContentButtonVisible:"False",
          	searchTextJS:'javascript/search_config.js',
          	searchPositionJS:undefined
          };
          

          ## java部分 ##

          插件顯示實際是使用的jpg圖片,可以由pdf文檔生成,其中涉及的是正常圖片和縮略圖的生成。

          具體如下

          maven引入

          <dependency>
          			<groupId>org.apache.pdfbox</groupId>
          			<artifactId>fontbox</artifactId>
          			<version>2.0.9</version>
          		</dependency>
          		<dependency>
          			<groupId>org.apache.pdfbox</groupId>
          			<artifactId>pdfbox</artifactId>
          			<version>2.0.9</version>
          		</dependency>
          

          核心程序

          和往常一樣,jsPDF是一個開源的客戶端的PDF解決方案,在之前的文章中已經(jīng)介紹過幾個Web端和PDF相關(guān)的庫,jsPDF同樣是一個不錯的客戶端PDF引 SDK,你可以通過jsPDF在客戶端完成相關(guān)操作,它包含了非常豐富的API,幫助你完成一系列的復(fù)雜操作!可以說它是相當領(lǐng)先的HTML5客戶端解決方案了!



          Github

          https://github.com/MrRio/jsPDF

          Github star數(shù)17k+,可以說相當受歡迎了!


          安裝使用

          一般情況下我們會考慮使用包管理,常見的就是npm了,因此安裝非常簡單

          npm install jspdf --save
          

          或者也可以使用yarn

          yarn add jspdf
          

          接下來就是制作你的文件的時候了

          默認導(dǎo)出為a4紙張,縱向,使用毫米表示單位


          var doc = new jsPDF()
          doc.text('Hello world!', 10, 10)
          doc.save('a4.pdf')
          

          如果要更改紙張尺寸,方向或單位,可以執(zhí)行以下操作:


          var doc = new jsPDF({
           orientation: 'landscape',
           unit: 'in',
           format: [4, 2]
          })
          doc.text('Hello world!', 1, 1)
          doc.save('two-by-four.pdf')
          

          使用UTF-8 / TTF

          PDF中的14種標準字體僅限于ASCII代碼頁。如果要使用UTF-8,則必須集成自定義字體,該字體提供所需的字形。jsPDF支持.ttf文件。因此,如果你希望在pdf中使用中文文本,則您的字體必須具有必要的中文字形。因此,請檢查您的字體是否支持所需的字形,否則它將顯示空白而不是文本。



          要將字體添加到j(luò)sPDF,在/fontconverter/fontconverter.html中使用官網(wǎng)提供的fontconverter。fontconverter將創(chuàng)建一個js文件,其中包含提供的ttf文件的內(nèi)容作為base64編碼的字符串和jsPDF的附加代碼。你只需將生成的js-File添加到項目中即可。然后,就可以在代碼中使用setFont-method并編寫UTF-8編碼文本。



          Angular/Webpack/React等配置

          常規(guī)操作

          import * as jsPDF from 'jspdf'
          

          有些框架,必須像下面這樣

          import jsPDF from 'jspdf';
          


          API

          jsPDF的api非常豐富,在這里就不提供相關(guān)地址了,在Github必然找的到,本文重點不在于介紹jsPDF的用法,將部分API截圖展示,通過名稱大致能猜到一些意思,具體用法需要參考官網(wǎng)文檔:













          從截圖來看,其文檔特別的詳細,具體到每一個API在js文件的行數(shù),便于閱讀源代碼,包括參數(shù)以及返回值都非常明確:



          在線DEMO

          官方提供了一個在線demo,可以直接運行代碼,感興趣的可以先嘗試一下:



          總結(jié)

          jsPDF是筆者見過類似產(chǎn)品中較為突出的,幾乎涵蓋了所有PDF相關(guān)操作,非常詳細的文檔也讓開發(fā)者,輕松上手,在線demo還能快速學習,如果你的項目對PDF的操作比較多,不妨嘗試下jsPDF,唯一需要注意的就是解決字體問題,但是上文也提到過解決方案,感興趣的可以進行體驗!

          近新項目需要處理 PDF,研究了 PDf.js 之后覺得很不錯,于是寫篇文章推薦給大家。

          關(guān)于 PDF.js

          PDF.js 的功能和它的名字一樣簡單,是一個使用 HTML5 技術(shù)來讓前端網(wǎng)頁支持讀取、解析和顯示 PDF 文檔的 JS 工具庫。這個項目由大名鼎鼎的 Mozilla 組織開發(fā)并且更新維護著,沒錯,就是那個開發(fā)了火狐瀏覽器的 Mozilla。所以 pdf.js 也內(nèi)置在 Firefox 的 19+ 版本中,也是火狐瀏覽器的默認 PDF 處理工具。

          一般來說,要查看 PDF 文檔,我們需要一個 PDF 閱讀器軟件,而通過 PDF.js 可以在瀏覽器中直接顯示和處理 PDF 文檔,無論是在線瀏覽、存檔或者其他基于 PDF 的功能都可以實現(xiàn)。

          PDF.js 項目主頁

          PDF.js 的技術(shù)特性

          • 功能強大,內(nèi)置了很多實用的 api,幾乎可以對 PDF 文件“為所欲為”;
          • 兼容性超好,不僅支持現(xiàn)代瀏覽器,對于舊版本的瀏覽器也有很好的支持;
          • 易于上手,官方也提供了很多代碼例子。

          我用 PDF.js 來做什么?

          如果只是為什么顯示 PDF 文檔,其實大部分情況下瀏覽器都支持直接打開 PDF,之前碰到要顯示 PDF 的需求,都是直接在瀏覽器新標簽打開。

          在瀏覽器中渲染 PDF

          不過就在上周,我接到了一個需求,要在網(wǎng)頁上支持導(dǎo)入 PDF 文件,轉(zhuǎn)化成圖片保存到后端,并且還要提取 PDF 文檔中的文字。于是我就開始研究 PDF.js ,了解之后發(fā)現(xiàn)這個工具庫非常強大,完全可以滿足我的需求,那些在線轉(zhuǎn)換 PDF 的工具實際上都是基于 PDF.js 開發(fā)的。

          我要處理的文檔有一部分是發(fā)票,其實里面的文字并不是圖片,而是可以選擇的,這種類型的文檔通過 PDF.js 甚至可以直接獲取文字的內(nèi)容,OCR 識別的過程都免了,實在太棒了。

          開發(fā)上手體驗和使用建議

          要開始使用 PDF.js ,可以直接從項目下載源碼,然后在頁面中引入 pdf.js ,就可以按照代碼例子那些來使用了。

          官方文檔

          我的實現(xiàn)方式

          我是在 Vue 項目中使用,所以我選擇用 npm 安裝的方式:

          npm i pdfjs-dist -S

          然后在 Vue 頁面中引入 PDF.js,注意這里的引入方式,需要在包名后加上 /webpack ,否則會報錯,原因我也沒有去深入排查。

          <template>
          <div class="hello">
              <input
                type="file"
                name="file"
                id="file"
                accept="application/pdf"
                single
                placeholder="請選擇pdf文件"
                @change="handleFile"
              />
              <canvas id="viewer" ref="viewer" :width="width" :height="height"></canvas>
            </div>
          </template>
          <script>
          import { getDocument } from "pdfjs-dist/webpack"; // 注意這里的引入方式
          
          // 省略無關(guān)代碼...
          // methods:
              handleFile(e) {
                const reader = new FileReader();
                reader.onload = (evt) => {
                  this.init(evt.target.result);
                };
          
                reader.readAsDataURL(e.target.files[0]);
              },
              async init(path) {
                // 讀取pdf
                let pdf = await getDocument(path).promise; //返回一個pdf對象
                const page = await pdf.getPage(0); // 獲取第一頁
                const viewport = page.getViewport({ scale: 1 });
                const textContent = await page.getTextContent();
                console.log(textContent.items); // 頁面的文章內(nèi)容在這
          
                const context = this.canvas.getContext("2d");
                // 設(shè)置canvas的尺寸
                this.width = viewport.width;
                this.height = viewport.height;
                await page.render({ canvasContext: context, viewport: viewport }).promise; // 渲染第一頁內(nèi)容
              },
          
          </script>

          上面這段代碼就是我項目 demo 中的一部分,可以實現(xiàn)讀取 PDF 文檔中的頁面和文字,代碼的末尾把第一頁渲染到了 canvas 中,想要轉(zhuǎn)成圖片,只要把 canvas 中的內(nèi)容轉(zhuǎn)成 PNG 圖片即可,區(qū)區(qū)十來行代碼,非常簡單。

          更多建議

          除了提取文章和轉(zhuǎn)成圖片,PDF.js 還很多強大的功能,比如可以實現(xiàn)頁面導(dǎo)航,預(yù)覽時加入縮放、滾動、旋轉(zhuǎn)和手寫等注釋以及實現(xiàn)打印、另存為等操作。

          還有些付費軟件的功能是壓縮 PDF 文檔,PDF.js 也可以壓縮處理超大型的 PDF 文檔,技術(shù)原理是把文檔中沒有使用的結(jié)構(gòu)、元素和對象刪除,大大簡化文檔,從而起到壓縮的效果。

          總之,想要在項目處理 PDF,PDF.js 是首選,并且目前沒有看到類似好用并且強大的 JS 庫,反而很多 PDF 工具都是基于 PDF.js 二次封裝的。

          免費開源說明

          Mozilla 組織本身是一個非營利性組織,成立以來一直致力于推動瀏覽器的良好發(fā)展,PDF.js 也不例外,是一個免費開源的項目,源碼基于 Apache 2.0 許可托管在 Github 上,任何人都可以免費下載來使用,用在商業(yè)項目也完全沒問題。

          ↓↓點擊查看本次分享的網(wǎng)站。

          PDF.js - 免費開源的 JavaScript 讀取、顯示 PDF 文檔的工具庫,由 Mozilla 開發(fā)并且持續(xù)維護|那些免費的磚


          主站蜘蛛池模板: 亚洲乱码一区二区三区在线观看| 亚洲日韩一区二区三区| 国精产品一区一区三区| 精品人伦一区二区三区潘金莲| 无码人妻一区二区三区免费视频| 亚洲男女一区二区三区| 国产在线一区二区综合免费视频| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产精品久久亚洲一区二区| 无码精品视频一区二区三区| 狠狠色成人一区二区三区| 一级特黄性色生活片一区二区| 日韩精品一区二区三区国语自制 | 精品一区二区三人妻视频| 在线视频一区二区| 一区二区三区国产精品| 熟妇人妻系列av无码一区二区| 精品3d动漫视频一区在线观看| 国产成人精品一区二区三在线观看| 无码一区二区三区AV免费| 国产高清在线精品一区| 中文乱码字幕高清一区二区| 国产一区二区三区影院| 国产一区二区久久久| 国产精品高清一区二区三区不卡| 久久精品无码一区二区WWW| 91一区二区在线观看精品| 国产午夜精品片一区二区三区| 精品国产一区二区三区四区 | 亚州AV综合色区无码一区| 中文字幕AV无码一区二区三区| 无码国产精品一区二区免费16| 中文人妻无码一区二区三区| 亚洲性日韩精品国产一区二区| 中文字幕不卡一区| 久久精品国产一区二区三区不卡| 国产在线一区二区三区在线| 日本精品视频一区二区| 精品国产一区二区三区久久狼| 亚洲一区爱区精品无码| 四虎永久在线精品免费一区二区|