電子書轉換為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')

最后看一下效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM