mirror of
https://gitee.com/bookshelfplus/bookshelfplus
synced 2025-09-03 23:52:51 +08:00
first commit
This commit is contained in:
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
output/*
|
||||
*.pdf
|
||||
*.png
|
||||
*.zip
|
||||
*.json
|
||||
*.bak
|
143
packFile.py
Normal file
143
packFile.py
Normal file
@@ -0,0 +1,143 @@
|
||||
# 书栖网 电子书打包工具
|
||||
|
||||
# 获取系统命令行参数
|
||||
import sys
|
||||
# 获取当前目录
|
||||
import os
|
||||
# 压缩文件
|
||||
import zipfile
|
||||
# 计算哈希
|
||||
import hashlib
|
||||
# 获取文档缩略图
|
||||
import fitz
|
||||
# 写入JSON文件
|
||||
import json
|
||||
|
||||
def get_filePath_fileName_fileExt(fileUrl):
|
||||
"""
|
||||
获取文件路径, 文件名, 后缀名
|
||||
:param fileUrl:
|
||||
:return:
|
||||
"""
|
||||
filepath, tmpfilename = os.path.split(fileUrl)
|
||||
shotname, extension = os.path.splitext(tmpfilename)
|
||||
return filepath, shotname, extension
|
||||
|
||||
def get_fileName(fileUrl):
|
||||
"""
|
||||
获取文件名
|
||||
:param fileUrl:
|
||||
:return:
|
||||
"""
|
||||
return os.path.basename(fileUrl)
|
||||
|
||||
def pack(filename, zipFileName):
|
||||
f = zipfile.ZipFile(zipFileName, 'w', zipfile.ZIP_DEFLATED)
|
||||
f.write(filename, get_fileName(filename))
|
||||
f.write("书栖网 bookshelf.plus.txt")
|
||||
f.close()
|
||||
|
||||
def CalcSha1(filepath):
|
||||
with open(filepath,'rb') as f:
|
||||
sha1obj = hashlib.sha1()
|
||||
sha1obj.update(f.read())
|
||||
hash = sha1obj.hexdigest()
|
||||
print(hash)
|
||||
return hash
|
||||
|
||||
def getCover(file_name, saveName):
|
||||
"""
|
||||
获取封面
|
||||
:param filepath:
|
||||
:return:
|
||||
"""
|
||||
cover = ""
|
||||
try:
|
||||
if '.pdf' not in file_name:
|
||||
print("此文件非PDF文件")
|
||||
return None
|
||||
# 打开PDF文件,生成一个对象
|
||||
doc = fitz.open(file_name)
|
||||
if doc.pageCount > 1:
|
||||
page = doc[0]
|
||||
rotate = int(0)
|
||||
# 每个尺寸的缩放系数为2,这将为我们生成分辨率提高四倍的图像。
|
||||
zoom_x = 2.0
|
||||
zoom_y = 2.0
|
||||
trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
|
||||
pm = page.get_pixmap(matrix=trans, alpha=False)
|
||||
# 保存路径
|
||||
pm.save(saveName)
|
||||
# pm.save('%s.png' % get_filePath_fileName_fileExt(file_name)[1])
|
||||
print("完成")
|
||||
return doc.pageCount
|
||||
else:
|
||||
return None
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
# 字节bytes转化kb\m\g
|
||||
def formatSize(bytes):
|
||||
try:
|
||||
bytes = float(bytes)
|
||||
kb = bytes / 1024
|
||||
except:
|
||||
print("传入的字节格式不对")
|
||||
return "Error"
|
||||
|
||||
if kb >= 1024:
|
||||
M = kb / 1024
|
||||
if M >= 1024:
|
||||
G = M / 1024
|
||||
return "%fG" % (G)
|
||||
else:
|
||||
return "%fM" % (M)
|
||||
else:
|
||||
return "%fkb" % (kb)
|
||||
|
||||
if __name__=='__main__':
|
||||
print("脚本名", sys.argv[0])
|
||||
print("当前文件夹", os.getcwd())
|
||||
if len(sys.argv) < 2:
|
||||
print("请拖入文件!")
|
||||
input("按回车键继续...")
|
||||
exit
|
||||
elif len(sys.argv) > 2:
|
||||
print("只能拖入一个文件!")
|
||||
input("按回车键继续...")
|
||||
exit
|
||||
|
||||
if not os.path.exists("output"):
|
||||
os.mkdir("output")
|
||||
|
||||
# 文件名
|
||||
filename = sys.argv[1]
|
||||
print(get_fileName(filename), filename)
|
||||
hash = CalcSha1(filename)
|
||||
|
||||
# 压缩文件
|
||||
zipFileName = "output/"+"zipFile.zip"
|
||||
pack(filename, zipFileName)
|
||||
os.rename(zipFileName, "output/"+hash+".zip")
|
||||
|
||||
# 页数
|
||||
pageCount = None
|
||||
# 封面
|
||||
if '.pdf' in sys.argv[1]:
|
||||
# 单个文件尝试获取封面
|
||||
pdfFile = sys.argv[1]
|
||||
pageCount = getCover(pdfFile, "output/"+hash+".png")
|
||||
|
||||
# 文件大小
|
||||
fileSize = os.path.getsize(filename)
|
||||
|
||||
# JSON
|
||||
result = {
|
||||
'name': get_fileName(filename),
|
||||
"pageCount": pageCount,
|
||||
'size': fileSize,
|
||||
'size_format': formatSize(fileSize)
|
||||
}
|
||||
with open("output/"+hash+".json", 'w') as f:
|
||||
json.dump(result, f)
|
||||
input()
|
13
书栖网 bookshelf.plus.txt
Normal file
13
书栖网 bookshelf.plus.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
[书栖网] 一个完全免费无门槛的计算机类电子书下载网站
|
||||
|
||||
本电子书由书栖网收集整理。我们承诺永远免费,不设置关注公众号等下载门槛,也不接受打赏。
|
||||
|
||||
书籍收集自互联网,由于电子书数量较多,整理时难免有所疏漏。我们无意侵犯他人的合法权益,如不申侵犯了您的权益,请发送邮件至 admin@only4.work 并提供相关权益证明材料,我们将第一时间下架相应资源。
|
||||
|
||||
书栖网由程序员小墨个人开发,网站已开源,如果对你有帮助,欢迎前往仓库点个Star,你的支持是我们前行的动力!
|
||||
GitHub: https://github.com/bookshelfplus/bookshelfplus
|
||||
Gitee: https://gitee.com/bookshelfplus/bookshelfplus
|
||||
我的B站: https://space.bilibili.com/457109942
|
||||
|
||||
书栖网 bookshelf.plus
|
||||
网站始建于 2022.04
|
Reference in New Issue
Block a user