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分析nignx访问日志脚本分享
Feb 26 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
使用turtle绘制五角星、分形树
Oct 06 Python
python 遍历pd.Series的index和value
Nov 26 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
详解用 python-docx 创建浮动图片
Jan 24 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性能的21种方法介绍
2013/06/25 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
js日期联动示例
2014/05/02 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
JS中Location使用详解
2015/05/12 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
python实现将内容分行输出
2015/11/05 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
美食节策划方案
2014/05/26 职场文书
销售顾问工作计划书
2014/08/15 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
采购员岗位职责
2015/02/03 职场文书
离婚律师函范本
2015/05/27 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS