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下如何让web元素的生成更简单的分析
Jul 17 Python
python连接oracle数据库实例
Oct 17 Python
Python字符串和文件操作常用函数分析
Apr 08 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Python计时相关操作详解【time,datetime】
May 26 Python
Python中的上下文管理器和with语句的使用
Apr 17 Python
Python通过文本和图片生成词云图
May 21 Python
详解Python yaml模块
Sep 23 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
python实现双人五子棋(终端版)
Dec 30 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 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中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
python查询mysql中文乱码问题
2014/11/09 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
python opencv实现图像配准与比较
2021/02/09 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
销售自荐信
2013/10/22 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
2014年高考决心书
2014/03/11 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
招标保密承诺书
2015/01/20 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
运动会通讯稿50字
2015/07/20 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python