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同时给两个收件人发送邮件的方法
Apr 30 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
Python中文编码知识点
Feb 18 Python
用python实现刷点击率的示例代码
Feb 21 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
Python如何输出警告信息
Jul 30 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
javascript Excel操作知识点
2009/04/24 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
跟老齐学Python之??碌某?? target=
2014/09/12 Python
基于Python的接口测试框架实例
2016/11/04 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python抓取文件夹的所有文件
2018/02/27 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
python中的yield from语法快速学习
2020/11/06 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
如何用python写个模板引擎
2021/01/14 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
工作表现评语
2014/01/19 职场文书
人事部专员岗位职责
2014/03/04 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
干部考核工作总结
2015/08/12 职场文书