电子书转换为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')
最后看一下效果图:

电子书转换为PDF格式的更多相关文章
- java 调用OpenOffice将word格式文件转换为pdf格式
一:环境搭建 OpenOffice 下载地址http://www.openoffice.org/ JodConverter 下载地址http://sourceforge.net/projects/jo ...
- CEBX格式的文档如何转换为PDF格式文档、DOCX文档?
方正阿帕比CEBX格式的文档如何转换为PDF格式文档.DOCX文档? 简介: PDF.Doc.Docx格式的文档使用的非常普遍,金山WPS可以直接打开PDF和Doc.Docx文档,使用也很方便. CE ...
- C#实现office文档转换为PDF格式
1.安装组件OfficeSaveAsPDFandXPS 需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS 下载地址 OfficeSave ...
- java使用jacob将office文档转换为PDF格式
jacob 包下载地址: http://sourceforge.net/projects/jacob-project/ 下载后,将jacob 与 jacob-1.19-x64.dll放到安装jdk目录 ...
- 文档转换为pdf格式帮助类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Word = M ...
- 使用openoffice将word文件转换为pdf格式遇到问题:The type com.sun.star.lang.XEventListener cannot be resolved. It is indirectly referenced from required
The type com.sun.star.lang.XEventListener cannot be resolved. It is indirectly referenced from requi ...
- C#实现office文档转换为PDF或xps的一些方法( 转)
源博客http://blog.csdn.net/kable999/article/details/4786654 代码支持任意office格式 需要安装office 2007 还有一个office20 ...
- C#, VB.NET如何将Excel转换为PDF
在日常工作中,我们经常需要把Excel文档转换为PDF文档.你是否在苦恼如何以C#, VB.NET编程的方式将Excel文档转换为PDF文档呢?你是否查阅了许多资料,运用了大量的代码,但转换后的效果依 ...
- PHP 实现 word/excel/ppt 转换为 PDF
前段时间负责公司内部文件平台的设计,其中有一个需求是要能够在线浏览用户上传的 office 文件. 我的思路是先将 office 转换成 PDF,再通过 pdf.js 插件解析 PDF 文件,使其能在 ...
随机推荐
- php 调试的常用方法
1. php 页面直接输出错误, 根据错误进行调试 2.无法通过php页面捕获到错误,通过查看apache2的日志错误进行排查, 像通过系统命令进行操作失败时,就需要日志进行查看
- 如何发布自己的 jar 包到 maven 中央仓库(待更新...)
参考链接 如何发布自己的 jar 包到 maven 中央仓库
- Linux 系统管理
- 集合-HashMap
该文章的实践内容来自how2java网站,集合的学习篇章 1.概念: HashMap是以哈希表作为底层数据结构,以一组键值对作为存储单元的Map接口的实现类. 其主要特点是,容器内的元素不以添加顺序排 ...
- flask 连接数据库
FLASK 连接mysql 数据库 1 # -*- encoding: utf-8 -*- 2 3 from flask import Flask 4 #导入第三方连接库 5 from flask_s ...
- pytroch 0.3 到 0.4版本迁移资料mark
搜了一堆,还是官方资料给力,一份中文,一份英文,maek一下 https://www.pytorchtutorial.com/pytorch-0-4-0-migration-guide/ https: ...
- platform模块
import platform ''' python中,platform模块给我们提供了很多方法去获取操作系统的信息 如: import platform platform.platform() #获 ...
- Linux内存分配小结--malloc、brk、mmap【转】
转自:https://blog.csdn.net/gfgdsg/article/details/42709943 http://blog.163.com/xychenbaihu@yeah/blog/s ...
- vc++高级班之窗口篇[4]---让程序只运行一个实例
大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是 ...
- Entity Framework插入数据报错:Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
stackoverflow的解决方法 try { db.Entity.Add(entity); db.SaveChanges(); } catch (DbEntityValidationExcepti ...