博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python处理PDF及生成多层PDF
阅读量:2239 次
发布时间:2019-05-09

本文共 2166 字,大约阅读时间需要 7 分钟。

Python提供了众多的PDF支持库,本文是在Python3环境下,试用了两个库来完成PDF的生成的功能。PyPDF对于读取PDF支持较好,但是没找到生成多层PDF的方法。Reportlab看起来更成熟,能够利用Canvas很方便的生成多层PDF,这样就能够实现图片扫描上来的内容也可以进行内容搜索的目标。

Reportlab

生成双层PDF

双层PDF应用PDF中的Canvas概念,先画文字,最后将图片画上去,这样就是两层的PDF。

import os# import urllib2import timefrom reportlab import platypusfrom reportlab.lib.pagesizes import letterfrom reportlab.lib.units import inchfrom reportlab.platypus import SimpleDocTemplate, Imagefrom reportlab.pdfgen import canvasimage_file = "./42.png"# Use Canvas to generate pdfc = canvas.Canvas('reportlab_canvas.pdf', pagesize=letter)width, height = letterc.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, PdfFileReaderoutput = PdfFileWriter()input1 = PdfFileReader(open("jquery.pdf", "rb"))# print document infoprint(input1.getDocumentInfo())# print how many pages input1 has:print ("pdf_document.pdf has %d pages." % input1.getNumPages())# print page contentpage_content = input1.getPage(0).extractText()print( page_content )# add page 1 from input1 to output document, unchangedoutput.addPage(input1.getPage(0))# add page 2 from input1, but rotated clockwise 90 degreesoutput.addPage(input1.getPage(1).rotateClockwise(90))# finally, write "output" to document-output.pdfoutputStream = 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

参考资料:

1、
2、
3、
4、
5、
6、
7、
8、

转载于:https://www.cnblogs.com/cocowool/p/6756966.html

你可能感兴趣的文章
【C语言】深度理解函数的调用(栈帧)
查看>>
【Linux】进程的理解(三)
查看>>
【C++】带头节点的双向线链表的实现
查看>>
【C++】STL -- Vector容器的用法
查看>>
【Linux】Linux中的0644 和 0755的权限
查看>>
【数据结构】有关二叉树的面试题
查看>>
【Linux】内核态和用户态
查看>>
【Linux】HTTP的理解
查看>>
【Linux】HTTPS的理解
查看>>
【操作系统】大小端问题
查看>>
Git上传代码时碰到的问题及解决方法
查看>>
【Linux】vim的简单配置
查看>>
【C++】智能指针
查看>>
【C++】const修饰的成员函数
查看>>
【C++】面向对象的三大特性
查看>>
【C++】智能指针(后续)
查看>>
【C】堆区和栈区的区别
查看>>
【linux】send和recv函数解析
查看>>
【Linux】线程安全的单例模式以及计算密集型线程和IO密集型线程
查看>>
一次完整的HTTP请求是怎样的??
查看>>