由于买了个kindle,所以想要最大效率地利用它。而在kindle上看pdf是很难受的,因为kindle屏幕太小,展示一个页面字体基本看不清。
因此,我写了个python脚本,配合acrobat使用能够把原始的pdf,尤其是A4页面格式的pdf转换成kindle看着舒适的pdf。使用方法如下
裁剪pdf
使用acrobat等软件对相应的pdf进行裁剪,尽量多得去除白边。这样在kindle上才能看到尽量大的文字
对于文字版pdf,白边界限很清楚,可以使用pdf-xchange editor,然后文档->裁剪页面->设为空白外边框,然后点全部页面。此时能够自动去除白边,效果非常好
使用脚本拆分页面并转成kindle可见的大小
脚本如下:
import os
import PyPDF2
from multiprocessing import Process
import shutil
"""
将pdf文件切割成kindle可看的大小
"""
class PDF2Kindle(object):
"""
PDF到kindle阅读的类
"""
def FillPage(self,page,ws,hs):
"""
这里本来想要做成如果剩下想要拆分的页面不够铺满想要的大小,则在后面填充空白,试了几次都失败了,不过可以凑合用
params:
page,页面句柄
ws,int,标准宽度
hs,int,标准高度
return:
new_page,新的页面句柄
"""
# blank = page.createBlankPage(width=ws,height=hs)
# if self.crosswise:
# blank.rotateCounterClockwise(90)
# blank.mergePage(page)
return page
def CropPage(self,pdf_writer,page,page_idx):
"""
读取图片,裁剪为标准大小,并输出为pdf
params:
pdf_writer,读取的pdf文件句柄
page,该页面句柄
return:
pdf_writer,返回的pdf文件句柄,FIXME 可能用不到
page_num,int,页数
"""
all_crops = []
if self.crosswise:
ws = self.hs
hs = self.ws
else:
ws = self.ws
hs = self.hs
w = float(page.mediaBox.getUpperRight_x())
h = float(page.mediaBox.getUpperRight_y())
cwbeg = float(page.cropBox.getLowerLeft_x())
chbeg = float(page.cropBox.getLowerLeft_y())
cwend = float(page.cropBox.getUpperRight_x())
chend = float(page.cropBox.getUpperRight_y())
print("Generating %s page %d, shape=(%d,%d) ..." % (self.read_full_name,page_idx+1,w,h))
scale = ws/(cwend-cwbeg)
page.scaleBy(scale)
cwbeg *= scale
chbeg *= scale
cwend *= scale
chend *= scale
page.cropBox.lowerLeft=(cwbeg,chbeg)
page.cropBox.upperRight=(cwend,chend)
if self.crosswise:
page.rotateCounterClockwise(90)
#进行分割
hend = chend
cnt = 0
while hend > chbeg:
new_page = page
new_page.cropBox.upperRight= (cwend,hend)
new_page.cropBox.lowerLeft = (cwbeg