摘要:基于轉(zhuǎn)換的電子書閱讀插件部分項(xiàng)目一般都是以插件閱讀文件,但存在閱讀體驗(yàn)不理想的情況,所以參考手機(jī)上的電子書閱讀器,使用國外的鏈接描述制作電子書示例。
基于HTML5轉(zhuǎn)換PDF的電子書閱讀插件 html5部分
項(xiàng)目一般都是以pdf.js插件閱讀PDF文件,但存在閱讀體驗(yàn)不理想的情況,所以參考手機(jī)上的電子書閱讀器,使用國外的鏈接描述http://fliphtml5.com
制作電子書示例。
完整代碼已上傳git,標(biāo)題搜索即可。
插件功能強(qiáng)大,縮略圖,鼠標(biāo)翻頁,放大縮小都可以,部分配置代碼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部分
插件顯示實(shí)際是使用的jpg圖片,可以由pdf文檔生成,其中涉及的是正常圖片和縮略圖的生成。
具體如下
maven引入
org.apache.pdfbox fontbox 2.0.9 org.apache.pdfbox pdfbox 2.0.9
核心程序
import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; public class pdftest { public static void main(String[] args) { String fileAddress="D:data"; String filename="qqq"; String type="jpg"; pdf2png(fileAddress,filename,type); } /** * 轉(zhuǎn)換全部的pdf * @param fileAddress 文件地址 * @param filename PDF文件名 * @param type 圖片類型 */ public static void pdf2png(String fileAddress,String filename,String type) { // 將pdf裝圖片 并且自定義圖片得格式大小 File file = new File(fileAddress+""+filename+".pdf"); try { PDDocument doc = PDDocument.load(file); PDFRenderer renderer = new PDFRenderer(doc); int pageCount = doc.getNumberOfPages(); for (int i = 0; i < pageCount; i++) { BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI //ImageIO.write(image, type, new File(fileAddress+""+filename+"_"+(i+1)+"."+type)); ImageIO.write(image, type, new File("D:datahtml5-ebook-paging-mobilefilesmobile"+(i+1)+"."+type)); BufferedImage srcImage = resize(image, 240, 240);//產(chǎn)生縮略圖 ImageIO.write(srcImage, type, new File("D:datahtml5-ebook-paging-mobilefiles humb"+(i+1)+"."+type));//產(chǎn)生縮略圖 } } catch (IOException e) { e.printStackTrace(); } } /** *自由確定起始頁和終止頁 * @param fileAddress 文件地址 * @param filename pdf文件名 * @param indexOfStart 開始頁 開始轉(zhuǎn)換的頁碼,從0開始 * @param indexOfEnd 結(jié)束頁 停止轉(zhuǎn)換的頁碼,-1為全部 * @param type 圖片類型 */ public static void pdf2png(String fileAddress,String filename,int indexOfStart,int indexOfEnd,String type) { // 將pdf裝圖片 并且自定義圖片得格式大小 File file = new File(fileAddress+""+filename+".pdf"); try { PDDocument doc = PDDocument.load(file); PDFRenderer renderer = new PDFRenderer(doc); int pageCount = doc.getNumberOfPages(); for (int i = indexOfStart; i < indexOfEnd; i++) { BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI // BufferedImage srcImage = resize(image, 240, 240);//產(chǎn)生縮略圖 ImageIO.write(image, type, new File(fileAddress+""+filename+"_"+(i+1)+"."+type)); } } catch (IOException e) { e.printStackTrace(); } } /** * 縮略圖 */ private static BufferedImage resize(BufferedImage source, int targetW, int targetH) { int type = source.getType(); BufferedImage target = null; double sx = (double) targetW / source.getWidth(); double sy = (double) targetH / source.getHeight(); if (sx > sy) { sx = sy; targetW = (int) (sx * source.getWidth()); } else { sy = sx; targetH = (int) (sy * source.getHeight()); } if (type == BufferedImage.TYPE_CUSTOM) { ColorModel cm = source.getColorModel(); WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH); boolean alphaPremultiplied = cm.isAlphaPremultiplied(); target = new BufferedImage(cm, raster, alphaPremultiplied, null); } else { target = new BufferedImage(targetW, targetH, type); } Graphics2D g = target.createGraphics(); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy)); g.dispose(); return target; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74588.html
摘要:安全生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫一個(gè)兼容標(biāo)準(zhǔn)的過濾器一個(gè)生成隨機(jī)數(shù)和字符串的庫使用生成隨機(jī)數(shù)的庫一個(gè)安全庫一個(gè)純安全通信庫一個(gè)簡單的鍵值加密存儲(chǔ)庫一個(gè)結(jié)構(gòu)化的安全層一個(gè)試驗(yàn)的面向?qū)ο蟮陌b庫一個(gè)掃描文件安全的庫 Security 安全 生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫 HTML Purifier-一個(gè)兼容標(biāo)準(zhǔn)的HTML過濾器 RandomLib-一個(gè)生成隨機(jī)數(shù)和字...
摘要:安全生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫一個(gè)兼容標(biāo)準(zhǔn)的過濾器一個(gè)生成隨機(jī)數(shù)和字符串的庫使用生成隨機(jī)數(shù)的庫一個(gè)安全庫一個(gè)純安全通信庫一個(gè)簡單的鍵值加密存儲(chǔ)庫一個(gè)結(jié)構(gòu)化的安全層一個(gè)試驗(yàn)的面向?qū)ο蟮陌b庫一個(gè)掃描文件安全的庫 Security 安全 生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫 HTML Purifier-一個(gè)兼容標(biāo)準(zhǔn)的HTML過濾器 RandomLib-一個(gè)生成隨機(jī)數(shù)和字...
摘要:在本文中,將探討如何從一個(gè)應(yīng)用程序中直接生成一個(gè)。然而,再次受到瀏覽器對(duì)和支持的限制。使用來實(shí)現(xiàn)規(guī)范嘗試使用實(shí)現(xiàn)規(guī)范實(shí)際上是創(chuàng)建了。就從應(yīng)用程序使用這些工具而言,需要在服務(wù)器上安裝它們。希望這是一個(gè)有用的工具總結(jié),可用幫你的應(yīng)用程序創(chuàng)建。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 在一些場景下,用戶都要求一些需要的數(shù)...
閱讀 3237·2023-04-26 01:39
閱讀 3382·2023-04-25 18:09
閱讀 1645·2021-10-08 10:05
閱讀 3266·2021-09-22 15:45
閱讀 2843·2019-08-30 15:55
閱讀 2424·2019-08-30 15:54
閱讀 3189·2019-08-30 15:53
閱讀 1352·2019-08-29 12:32