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函数学习笔记
Oct 07 Python
从零学Python之入门(四)运算
May 27 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
Python实现二维有序数组查找的方法
Apr 27 Python
机器学习实战之knn算法pandas
Jun 22 Python
对python中的装包与解包实例详解
Aug 24 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
python:解析requests返回的response(json格式)说明
Apr 30 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
用python对oracle进行简单性能测试
Dec 05 Python
python xlwt模块的使用解析
Apr 13 Python
浅析Django接口版本控制
Jun 26 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
给Python初学者的一些编程技巧
2015/04/03 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
python二维图制作的实例代码
2020/12/03 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
Internal修饰符有什么含义
2013/07/10 面试题
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
兰兰过桥教学反思
2014/02/08 职场文书
2014庆六一活动方案
2014/03/02 职场文书
法定授权委托证明书
2014/09/27 职场文书
工伤事故证明
2014/10/20 职场文书
大学生求职信怎么写
2015/03/19 职场文书
小学教师工作总结2015
2015/04/07 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP