成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Rindia / 911人閱讀

摘要:基于轉(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

相關(guān)文章

  • php 學(xué)習(xí)指南及技術(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ù)和字...

    lifefriend_007 評(píng)論0 收藏0
  • php 學(xué)習(xí)指南及技術(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ù)和字...

    skinner 評(píng)論0 收藏0
  • Web應(yīng)用程序如何創(chuàng)建 PDF

    摘要:在本文中,將探討如何從一個(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ù)...

    AlexTuan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<