我与一个00后程序员的聊天记录之三p

小孩白癜风早期症状 http://disease.39.net/bjzkbdfyy/180617/6337052.html

各位在阅读这篇文章之前,我首先声明一下,我不是培训机构的,所以不要给我私信什么“01获取资料”的东西,如果你看完文章有什么心得或体验,可以在文章的后面留言或私信我,我看到后都会第一时间回复的

最近小李子又来找我了,这次还是他女朋友的工作需求,需要对批量对pdf文件作处理,如下图:

pdf文件中随机出现的横放页面按小李子的描述,就是他的女朋友工作上要处理很多pdf文件,然后这些pdf文件中就有可能会出现一些页面是横放,但是工作需求就是要把这些横放的页面全部变成竖放的(横放的定义就是这个pdf的页面长度的数值比宽度的数值大,而竖放的定义就是pdf的页面长度要比宽度小)

小李子其实自己也写了一段代码,不过就是效果不好,如下图:

小李子的代码部分截图还是小李子的写的代码截图

通过观察小李子的代码,他的思路是是获取到pdf中横着放的页面,由代码将横着放的页面改成竖着放后,最后将改成竖着放的页面保存成一个新的图片,最后再将图片重新放到pdf中

我猜中了小李子的思路

我就觉得小李子这个思路有点画蛇添足了,直接用代码操作pdf就行了,为什么还要将改好的页面先保存成图片,然后再放到pdf中呢?在我的一再追问下,小李子承认了,他写的代码中是直接问的度娘抄的,所以才在代码中用了一个比较陌生的库fitz,果然b站一个up主说得没错,程序员的日常工作,有百分之90以上的时间都是在疯狂度娘或找csdn(有条件的话就上GitHub),先看有没有现成的,比较相似的项目代码,然后就拿来修改

小李子也认同我的说法

其实呢,也怪不得程序员要这样操作,毕竟如果每一个项目都要自己从头开始写,那都不知道要写到猴年马月,不过你就算要抄,也要抄出一个精髓,硬套别人的代码是没用的

回到正题,既然小李子这个专业的程序员验证过了fitz这个python的第三方库可以操作pdf文件,于是我也去问了度娘(没办法,毕竟python的第三方库太多了,不可能都记得并且都能熟练掌握的),果然度娘没有让我失望,fitz这个python的第三方库的官方文档介绍中,我找到了对pdf页面进行旋转的做法

遍历每一个pdf文件的页面并且进行旋转

我来介绍一下上面截图的代码,首先用fitz库提供的方法去打开一个pdf,然后去遍历这个pdf文件的每一页,fitz这个库可以获取pdf每一页的属性,并且初始化为一个对象,就是截图中的这段代码mediabox=page.mediabox,fitz这个第三方库的方便之处就是取得每一页pdf页面的四个角的横坐标和纵坐标,结合小李子的需求,我们只需要得到每一页pdf页面的右下角的横坐标和左下角的横坐标值之差(页面的长度),还有每一页pdf页面左上角的纵坐标和左下角纵坐标之差(页面的宽度),只要前者大于后者,那么这个页面就是横着放的,最后我们再调用fitz库的set_rotataion方法就可以将这个页面旋转了(set_rotataion方法中填写的数值是正数的时候,页面会顺时针旋转,负值就是逆时针旋转)

完整代码截图

发给小李子测试,完全没有问题

小李子改了文件路径测试代码,没问题后来按小李子的反馈,他女朋友实际使用的时候,多个pdf文件,交给代码处理,十多分钟就搞掂了,不得不说python的能力还真是强,一些繁重而又费时间的工作,完全可以交给计算机去处理,代码就是有这样的妙处




转载请注明:http://www.aierlanlan.com/grrz/6119.html