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中多线程及程序锁浅析
Jan 21 Python
Unicode和Python的中文处理
Mar 19 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
Python中拆分字符串的操作方法
Jul 23 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
python模拟实现分发扑克牌
Apr 22 Python
Pandas数据分析的一些常用小技巧
Feb 07 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自动反斜杠的函数代码
2010/01/05 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
php页面缓存方法小结
2015/01/10 PHP
Symfony控制层深入详解
2016/03/17 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Ubuntu下安装PyV8
2016/03/13 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
python3去掉string中的标点符号方法
2019/01/22 Python
在Python中表示一个对象的方法
2019/06/25 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
python文件读写代码实例
2019/10/21 Python
Python 如何对文件目录操作
2020/07/10 Python
通过代码实例了解Python sys模块
2020/09/14 Python
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
中专毕业生自我鉴定
2013/11/21 职场文书
体育教学随笔感言
2014/02/24 职场文书
高一新生军训感言
2014/03/02 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
公司老总年会致辞
2015/07/30 职场文书
入党后的感想
2015/08/10 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
Python基础之元编程知识总结
2021/05/23 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python