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脚本来实现最简单的FTP下载的教程
May 04 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
Jun 07 Python
python入门教程之识别验证码
Mar 04 Python
用Pygal绘制直方图代码示例
Dec 07 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
python 重定向获取真实url的方法
May 11 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
python 监控logcat关键字功能
Sep 04 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP实现微信发红包程序
2015/08/24 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
js实现烟花特效
2020/03/02 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
python二分查找算法的递归实现方法
2016/05/12 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python列表与元组的异同详解
2019/07/02 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
django 环境变量配置过程详解
2019/08/06 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
物流毕业生个人的自我评价
2014/02/13 职场文书
安全标兵事迹材料
2014/08/17 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
职工宿舍管理制度
2015/08/05 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
MySQL分区路径子分区再分区
2022/04/13 MySQL