资讯专栏INFORMATION COLUMN

基于HTML5转换PDF的电子书阅读插件

Rindia / 621人阅读

摘要:基于转换的电子书阅读插件部分项目一般都是以插件阅读文件,但存在阅读体验不理想的情况,所以参考手机上的电子书阅读器,使用国外的链接描述制作电子书示例。

基于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;    
        }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74588.html

相关文章

  • php 学习指南及技术干货

    摘要:安全生成安全的随机数,加密数据,扫描漏洞的库一个兼容标准的过滤器一个生成随机数和字符串的库使用生成随机数的库一个安全库一个纯安全通信库一个简单的键值加密存储库一个结构化的安全层一个试验的面向对象的包装库一个扫描文件安全的库 Security 安全 生成安全的随机数,加密数据,扫描漏洞的库 HTML Purifier-一个兼容标准的HTML过滤器 RandomLib-一个生成随机数和字...

    lifefriend_007 评论0 收藏0
  • php 学习指南及技术干货

    摘要:安全生成安全的随机数,加密数据,扫描漏洞的库一个兼容标准的过滤器一个生成随机数和字符串的库使用生成随机数的库一个安全库一个纯安全通信库一个简单的键值加密存储库一个结构化的安全层一个试验的面向对象的包装库一个扫描文件安全的库 Security 安全 生成安全的随机数,加密数据,扫描漏洞的库 HTML Purifier-一个兼容标准的HTML过滤器 RandomLib-一个生成随机数和字...

    skinner 评论0 收藏0
  • Web应用程序如何创建 PDF

    摘要:在本文中,将探讨如何从一个应用程序中直接生成一个。然而,再次受到浏览器对和支持的限制。使用来实现规范尝试使用实现规范实际上是创建了。就从应用程序使用这些工具而言,需要在服务器上安装它们。希望这是一个有用的工具总结,可用帮你的应用程序创建。 为了保证的可读性,本文采用意译而非直译。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 在一些场景下,用户都要求一些需要的数...

    AlexTuan 评论0 收藏0

发表评论

0条评论

Rindia

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<