使用pypdf2把原始pdf转换成kindle看着舒适的pdf

本文介绍了如何使用Python脚本和Adobe Acrobat将原始A4格式的PDF转换为适合Kindle阅读的版本。步骤包括裁剪PDF以去除白边、脚本拆分并调整页面大小、压缩PDF以及可选的PDF拆分操作,以提高在Kindle上的阅读体验。
摘要由CSDN通过智能技术生成

由于买了个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值