zoukankan      html  css  js  c++  java
  • 电子书转换为PDF格式

    背景:当我们从网上下载一些电子小说或书籍的时候,一般文件的格式可能是.epub、.mobi等。这些格式的文件需要特定的手机阅读软件才能打开(有些能打开但是会出现乱码,排版混乱的情况)。蓝瘦想哭~~

    由于PDF格式的文件查看打开比较方便,所以百度搜索了一下电子书转换为PDF格式的软件,没有几个是好用的,最后终于找到一个比较满意的 calibre 可以批量,且支持多种格式转换【此处并非打广告,这个软件确实还可以】

    一、mobi 转换 pdf 步骤

    • 添加书籍-- 选择需要转换的书籍
    • 设置文件导出的目录,以及输出格式
    • 按住Ctrl, 选择多个书籍
    • 右键选择转换书籍--选择批量转换
    • 最后等待所有书籍转换成功

    二、查看转换后的结果目录

    打开转换的书籍的目录,可以看到所有换的书籍以作者名字命名,下一级目录则以书名命名。该目录下包含封面图片,源文件以及转换后的PDF文件,还有 metadata.opf 书籍信息文件

        

    三、将PDF还原文件名且移出至新目录

    从转换后的目录来看,源文件的中文名都换成了拼音的名字,看的蓝瘦(一个文件还好说,这么多个...)
    需求: 将文件换成原来的中文名,且移动到新的目录下
    思路: 从metadata.opf 读取 title标签【即书名】,然后将PDF 文件名替换为 title标签的名字

    # -*- coding: utf-8 -*-
    """
    @ author: zzw
    @ data: 2018-05-06
    """
    import os
    import re
    
    
    class FileRename(object):
       # def __init__(self, np):
            # self.oldPath = op
            # self.newPath = np
    
        # 获取文件的中文名字
        @staticmethod
        def get_name(file):
            name = ''
            name_list = []
            f = open(file, 'r', encoding='utf-8')
            for line in f.readlines():
                # 格式:   <dc:title>string</dc:title>
                if '<dc:title>' in line:
                    # 得到 string 且将字符串中含有windows 下特殊字符替换
                    string = line.strip().lstrip('<dc:title>').rstrip('</dc:title>')
                    name = re.sub(r'[\/:*?"<>|]', '_', string)
                    # 去重(如果name出现相同的行则增加字符串(2))
                    if name not in name_list:
                        name_list.append(name)
                    else:
                        name = name+'(2)'
            f.close()
            return name
    
        def file_rename(self, path, n_path):
            dir_list = os.listdir(path)
            for fp in dir_list:
                dir_next = os.path.join(path, fp)
                if os.path.isdir(dir_next):
                    self.file_rename(dir_next, n_path)
                elif os.path.isfile(dir_next) and os.path.splitext(dir_next)[1] == '.pdf':
                    # 从 pdf文件同路径下的metadata.opf 文件获取中文名字
                    src = os.path.dirname(dir_next) + "\metadata.opf"
                    if not os.path.exists(n_path):
                        os.mkdir(n_path)
                    new_name = n_path + os.sep + self.get_name(src) + ".pdf"
                    try:
                        # 重命名文件且移动文件
                        os.rename(dir_next, new_name)
                    except OSError as e:
                        print(e)
                else:
                    pass
    
    
    if __name__ == '__main__':
        FileRename().file_rename("F:\zzwTest\book", "F:\zzwTest\newBook")
        print('done')
    

    最后看一下效果图:

  • 相关阅读:
    诡异的Integer
    你已经创建了多少个对象?
    静态方法中使用非静态化数据
    静态化初始块的执行顺序
    java中的多构造函数以及类字段的初始化顺序
    java中类的构造方法出错点
    程序员修炼之道读后感
    纯随机数发生器,以及函数重载的问题
    递归判断回文
    使用jQuery操作DOM元素
  • 原文地址:https://www.cnblogs.com/zeo-to-one/p/9463313.html
Copyright © 2011-2022 走看看