摘要:基于轉換的電子書閱讀插件部分項目一般都是以插件閱讀文件,但存在閱讀體驗不理想的情況,所以參考手機上的電子書閱讀器,使用國外的鏈接描述制作電子書示例。
基于HTML5轉換PDF的電子書閱讀插件 html5部分
項目一般都是以pdf.js插件閱讀PDF文件,但存在閱讀體驗不理想的情況,所以參考手機上的電子書閱讀器,使用國外的鏈接描述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引入
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); } /** * 轉換全部的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);//產生縮略圖 ImageIO.write(srcImage, type, new File("D:datahtml5-ebook-paging-mobilefiles humb"+(i+1)+"."+type));//產生縮略圖 } } catch (IOException e) { e.printStackTrace(); } } /** *自由確定起始頁和終止頁 * @param fileAddress 文件地址 * @param filename pdf文件名 * @param indexOfStart 開始頁 開始轉換的頁碼,從0開始 * @param indexOfEnd 結束頁 停止轉換的頁碼,-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);//產生縮略圖 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; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74588.html
摘要:安全生成安全的隨機數,加密數據,掃描漏洞的庫一個兼容標準的過濾器一個生成隨機數和字符串的庫使用生成隨機數的庫一個安全庫一個純安全通信庫一個簡單的鍵值加密存儲庫一個結構化的安全層一個試驗的面向對象的包裝庫一個掃描文件安全的庫 Security 安全 生成安全的隨機數,加密數據,掃描漏洞的庫 HTML Purifier-一個兼容標準的HTML過濾器 RandomLib-一個生成隨機數和字...
摘要:安全生成安全的隨機數,加密數據,掃描漏洞的庫一個兼容標準的過濾器一個生成隨機數和字符串的庫使用生成隨機數的庫一個安全庫一個純安全通信庫一個簡單的鍵值加密存儲庫一個結構化的安全層一個試驗的面向對象的包裝庫一個掃描文件安全的庫 Security 安全 生成安全的隨機數,加密數據,掃描漏洞的庫 HTML Purifier-一個兼容標準的HTML過濾器 RandomLib-一個生成隨機數和字...
摘要:在本文中,將探討如何從一個應用程序中直接生成一個。然而,再次受到瀏覽器對和支持的限制。使用來實現規范嘗試使用實現規范實際上是創建了。就從應用程序使用這些工具而言,需要在服務器上安裝它們。希望這是一個有用的工具總結,可用幫你的應用程序創建。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你! 在一些場景下,用戶都要求一些需要的數...
閱讀 3192·2023-04-26 01:39
閱讀 3345·2023-04-25 18:09
閱讀 1612·2021-10-08 10:05
閱讀 3228·2021-09-22 15:45
閱讀 2758·2019-08-30 15:55
閱讀 2393·2019-08-30 15:54
閱讀 3167·2019-08-30 15:53
閱讀 1324·2019-08-29 12:32