python处理pdf 层_Python处理PDF及生成多层PDF实例代码

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2017-04-21

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web应用服务器计算资源核算,浅谈网络计算与应用.doc

浅谈网络计算与应用.doc浅谈网络计算与应用摘要:作为一种新型的分布计算技术,网格计算将地理上分布的、异构的资源 用高速网络连接在一起,集成一台高速的超级计算机。分析了网格计算的意义、 体系结构、资源管理、任务管理与任务调度、高速通信和安全等核…

dtft变换的性质_[2018年最新整理]DTFT变换.ppt

[2018年最新整理]DTFT变换信号和系统的分析方法有两种 时域分析方法 频率分析方法 序列的频域分析 z变换 序列的傅里叶变换(离散时间傅里叶变换) 模拟信号xa(t)的一对傅里叶变换式用下面公式描述 离散时间傅里叶变换(DTFT)的定义 : 例1 设x(n)RN(n), 求x…

css 渐变 椭圆,CSS3圆角和渐变2种常用功能详解

Css3圆角讲解:想必大家对于图片,背景圆角,都不陌生吧,圆角语法:border-radius:圆角值;CSS3圆角的优点传统的圆角生成方案,必须使用多张图片作为背景图案。CSS3的出现,使得…

db2存储过程 可以使用游标循环嵌套吗_DB2存储过程使用动态游标的例子

本文将为您介绍一个DB2存储过程使用动态游标的例子,如果您对动态游标的使用感兴趣的话,不妨一看,对您学习DB2的使用会有所帮助。CREATE PROCEDURE data_wtptest( IN in_taskid_timestamp varchar(30),OUT o_err_no int,OUT o_err_msg varchar…

串口服务器信号连接不上,使用RS485串口服务器经常遇到的问题

1、为什么设备使用RS-485串口通信?RS-485设备可以连接到计算机,并在网络样式配置中的多个位置进行多次丢弃。在需要中继器之前,设备可以距离最远4000英尺(1220米),最多可以连接32个节点(设备)。可以使用中继器连接更多节点,最多可…

move std 函数 示例_C++ STL迭代器辅助函数

advance(it, n) ---------- it 表示某个迭代器,n 为整数。该函数的功能是将 it 迭代器前进或后退 n 个位置。distance(first, last) ---------- first 和 last 都是迭代器,该函数的功能是计算 first 和 last 之间的距离。begin(cont) …

网页微博连接不上服务器,新浪微博网络出错加载不了怎么办

1. 手机上新浪微博显示网络连接失败2. 手机登陆新浪微博为什么显示网络连接失败3. 微博老是出现网络出错,重新加载怎么办手机上新浪微博显示网络连接失败困扰了一天刚解决了1电脑上微博授权应用中取消手机客户端授权(不同手机型号应用名称应该不同)2改密码不要用标点符号我就是…

小米air耳机重新配对_横比小米 Air 2s 和 OPPO Enco W31:同一颗芯玩出的大不同

2019 年 9 月,小米发布了新一代小米真无线蓝牙耳机 Air 2,采用半入耳式设计、支持蓝牙连接时的弹窗动画、支持小爱同学语音交互,价格依旧平民的 399 元,是小米高级产品总监李创奇眼中「一款体验接近 AirPods 的产品」。时隔半年&a…

裸金属服务器能虚拟化吗,裸金属服务器虚拟化概述

裸金属服务器虚拟化概述 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。SAP HANA运行在裸金属服务器上。需要根据部署场景&#xf…

获得分辨率_变分辨率宽幅面光固化3D打印,

作者 陈锐光,连芩 光固化3D打印以实现高分辨率著称,使用面曝光方式的设备还具有成型速度快的优点。但传统的面曝光设备存在着实现宽幅面和高分辨率的矛盾,由于镜头像素的限制,在提高其中一项性能的时候,会牺牲另一项。…

后宫宛如传服务器维护,合服丨《后宫宛如传》合服公告

合服活动活动时间: 3月25日合服结束后 至 4月8日 23:59:59※活动期间 任意5天,每天登录即可领取一份奖励,奖励包括 服装单品和 道具。累计登录5天并领取活动奖励,即可获得 限定套装泼墨流裙。※服装细节(点击图片查看大图)合服规则…

属性子集选择的基本启发方法_一文看懂数据预处理最重要的3种思想和方法

导读:本文我们考虑应当采用哪些预处理步骤,让数据更加适合挖掘。数据预处理是一个广泛的领域,包含大量以复杂的方式相关联的不同策略和技术。我们将讨论一些最重要的思想和方法,并试图指出它们之间的相互联系。作者:陈…

荣耀系统更新服务器不可用,荣耀确认系统更新方式 4月1日前发布的机型固件升级由华为负责...

近期,根据华为陆续发布的荣耀老机型鸿蒙HarmonyOS的路线图来看,荣耀手机 、平板等12款机型已经赫然在列。而随后,也引起了网友们对于荣耀产品系统更新的讨论,毕竟华为与荣耀分家之后,对于荣耀产品的系统更新一直是不少…

西建大历年电子与通信工程复试真题_学姐分享2020年西安电子科技大学电子与通信工程考研初复试经验指导...

大家好,我是西安电子科技大学电子工程学院上岸的研一学姐,专业是电子与通信工程,考研一路走来,通过自己摸索,掌握了一些必不可少的经验,写此经验贴,如果看到的学弟学妹读完之后会有一点收获&…

一个服务器上放多个网站,一个云服务器放多个网站吗

一个云服务器放多个网站吗 内容精选换一换如果您使用华为云云速邮箱作为企业邮箱,并在Web端管理使用,此时需要为邮箱绑定域名,通过域名访问网页版邮箱。本节介绍使用华为云云速邮箱,且网站域名解析至中国大陆节点服务器的网站备案…

electron开发_基于Electron+React的跨平台应用程序基础开发框架

介绍Electron React Boilerplate是Github上超过12kstar的可扩展跨平台应用程序开发框架,Electron 是基于HTMLCSSJavascript等 Web 技术创建原生程序的框架,它已经帮我们搞定了最难搞的部分,而Electron React Boilerplate在其基础上进行了扩展…

挂机宝和网站服务器,挂机宝SSD硬盘vs普通硬盘访问官网哪个快?

原标题:挂机宝SSD硬盘vs普通硬盘访问官网哪个快?秒开云硬盘篇:SSD固态硬盘vs机械硬盘硬盘读写速度越快结构类型。网络服务器中的固态盘(SSD)比SATA磁盘驱动器给予更高的电脑磁盘读/写强度,也称之为键入/导出(I/O)性能指标。具备SS…

++递归 字符串全排列_超全递归技巧整理,这次一起拿下递归

0. 前言大家好,我是多选参数的程序锅,一个正在 neng 操作系统、学数据结构和算法以及 Java 的硬核菜鸡。本篇将主要介绍递归相关的内容,下面是本篇的内容提纲。1. 递归基础★ 争哥:从我自己学习数据结构和算法的经历来看&#xff…

图片合成gif_谈谈有哪些好用的制作GIF的方式

今天咱们谈谈计算机上几种制作 GIF 的方式,而且他们都是免费的,但可能需要你会一点计算机操作技能。本文会简单的介绍一些常用的GIF软件,比较一下功能和上手程度。常见的GIF录制方式大概有这么几种方式: 直接录制 , 视频转GIF &am…

提权命令_利用Linux文本操作命令ed进行提权

本文我将为大家介绍一个面向行的文本编辑器命令“ed”,它主要用于生成,显示,更改和操作文本文件。所有ed命令都在行或行范围内执行操作;例如,“d”命令删除行;“m”命令移动行,“t”命令复制行等…