Python处理PDF及生成多层PDF实例代码


Posted in Python onApril 24, 2017

Python提供了众多的PDF支持库,本文是在Python3环境下,试用了两个库来完成PDF的生成的功能。PyPDF对于读取PDF支持较好,但是没找到生成多层PDF的方法。Reportlab看起来更成熟,能够利用Canvas很方便的生成多层PDF,这样就能够实现图片扫描上来的内容也可以进行内容搜索的目标。

Reportlab

生成双层PDF

双层PDF应用PDF中的Canvas概念,先画文字,最后将图片画上去,这样就是两层的PDF。

import os
# import urllib2
import time
from reportlab import platypus
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Image
from reportlab.pdfgen import canvas

image_file = "./42.png"

# Use Canvas to generate pdf
c = canvas.Canvas('reportlab_canvas.pdf', pagesize=letter)
width, height = letter

c.setFillColorRGB(0,0.77,0.77)
# say hello (note after rotate the y coord needs to be negative!)
c.drawString( 3*inch, 3*inch, "Hello World")
c.drawImage(image_file, 0 , 0)
c.showPage()
c.save()

PyPDF2

读取PDF

from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter()
input1 = PdfFileReader(open("jquery.pdf", "rb"))

# print document info
print(input1.getDocumentInfo())

# print how many pages input1 has:
print ("pdf_document.pdf has %d pages." % input1.getNumPages())

# print page content
page_content = input1.getPage(0).extractText()
print( page_content )

# add page 1 from input1 to output document, unchanged
output.addPage(input1.getPage(0))

# add page 2 from input1, but rotated clockwise 90 degrees
output.addPage(input1.getPage(1).rotateClockwise(90))

# finally, write "output" to document-output.pdf
outputStream = open("PyPDF2-output.pdf", "wb")
output.write(outputStream)

但是PyPDF获取PDF内容有很多问题,可以看这个问题列表。文档中也有说明。

| extractText(self) | ## | # Locate all text drawing commands, in the order they are provided in the | # content stream, and extract the text. This works well for some PDF | # files, but poorly for others, depending on the generator used. This will | # be refined in the future. Do not rely on the order of text coming out of | # this function, as it will change if this function is made more | # sophisticated. | #
 | # Stability: Added in v1.7, will exist for all future v1.x releases. May | # be overhauled to provide more ordered text in the future. | # @return a unicode string object

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
Python中collections模块的基本使用教程
Dec 07 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
500行代码使用python写个微信小游戏飞机大战游戏
Oct 16 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
Python修改列表值问题解决方案
Mar 06 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
Python APScheduler执行使用方法详解
Dec 10 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 #Python
python爬虫实战之爬取京东商城实例教程
Apr 24 #Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 #Python
Python面向对象特殊成员
Apr 24 #Python
Python解惑之整数比较详解
Apr 24 #Python
Python解惑之True和False详解
Apr 24 #Python
Python新手入门最容易犯的错误总结
Apr 24 #Python
You might like
PHP 日常开发小技巧
2009/09/23 PHP
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
js闭包的用途详解
2014/11/09 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
基于node实现websocket协议
2016/04/25 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
JS判断数组那点事
2017/10/10 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
实现vuex原理的示例
2020/10/21 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
python实现的udp协议Server和Client代码实例
2014/06/04 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Python os.access()用法实例
2019/02/18 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
阿巴庭院:Abba Patio
2019/06/18 全球购物
《四季》教学反思
2014/04/08 职场文书
初中学生期末评语
2014/04/24 职场文书
爱护公共设施标语
2014/06/24 职场文书
讲党性心得体会
2014/09/03 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
音乐会主持人开场白
2015/05/28 职场文书
革命电影观后感
2015/06/18 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis