前言:
为神木等地区用户提供了全套网页设计制作服务,及神木网站建设行业解决方案。主营业务为成都网站设计、网站制作、神木网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档...很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。
[[338709]]永久免费的PDF编辑工具">
但是在可编辑性方面却为使用者引入了另外一个困扰。
曾经,为了替换PDF中的一页,我几乎试遍了所有市面上主流的PDF工具,最终还是不得不选择使用付费工具来解决问题。
事后想了想,既然这些商业化软件不靠谱,为什么不考虑自己动手开发一款工具呢?明明几十行代码能够解决的问题,为什么要费那么多劲去下载、安装那些没有节操的软件呢?
本文就来介绍一下利用Python轻松开发一款PDF编辑工具,可以用于PDF转TxT、分割、合并、剪切、转换。
有请主角登场 PyPDF2 和 pdfminer3k
简介:由纯 Python 构建的PDF 工具包。它能够:
直接使用pip安装
- pip install PyPDF2
- from PyPDF2 import PdfFileReader, PdfFileWriter
- infn = 'infn.pdf'
- outfn = 'outfn.pdf'
- # 获取一个 PdfFileReader 对象
- pdf_input = PdfFileReader(open(infn, 'rb'))
- # 获取PDF 的基本信息
- information =pdf_input.getDocumentInfo()
- print(information)
- # 获取 PDF 的页数
- page_count = pdf_input.getNumPages()
- print(page_count)
- # 返回一个 PageObject
- page = pdf_input.getPage(i)
- # 获取一个 PdfFileWriter 对象
- pdf_output = PdfFileWriter()
- # 将一个 PageObject 加入到 PdfFileWriter 中
- pdf_output.addPage(page)
- # 输出到文件中
- pdf_output.write(open(outfn, 'wb'))
- from PyPDF2 import PdfFileWriter, PdfFileReader
- # 实例化一个输出的PDF实例
- output = PdfFileWriter()
- # 读取一个PDF文件
- input1 = PdfFileReader(open("example.pdf", "rb"))
- # 要删除的操作
- def delete_pdf(index):
- pages = input1.getNumPages()
- # 循环删除
- for i in range(pages):
- if i+1 in index:
- continue
- output.addPage(input1.getPage(i))
- outputStream = open("PyPDF2-output.pdf", "wb")
- output.write(outputStream)
- delete_pdf([2,3,4])
- from PyPDF2 import PdfFileWriter, PdfFileReader
- output = PdfFileWriter()
- input1 = PdfFileReader(open("example.pdf", "rb"))
- input2 = PdfFileReader(open("simple2.pdf", "rb")) // 1
- def merge_pdf(add_index, origin_index):
- pages = input1.getNumPages()
- k = 0
- for i in range(pages):
- if i+1 in add_index:
- output.addPage(input2.getPage(origin_index[k])) // 2
- pages += 1
- k += 1
- output.addPage(input1.getPage(i))
- outputStream = open("PyPDF2-output.pdf", "wb")
- output.write(outputStream)
- merge_pdf([2,3,4], [0, 0, 0])
- # 旋转90度
- input1.getPage(1).rotateClockwise(90)
- page = input1.getPage(3)
- watermark = PdfFileReader(open("watermark.pdf", "rb"))
- page.mergePage(watermark.getPage(0))
- password = "secret"
- output.encrypt(password)
- print(output.decrypt('secret'))# secret==正确口令显示1,其他显示0
- page_obj= output.getPage(0)# 这样才能正确读取
- print(page_obj.extractText())
pdfminer3k 是一个 Python 3 端口的 pdfminer 。PDFMiner 是一个从 PDF 文档中提取信息的工具。与其他与 PDF 相关的工具不同,它完全侧重于获取和分析文本数据。PDFMiner 允许获取页面中文本的确切位置,以及其他信息,如字体或线条。它包括一个 PDF 转换器,可以将 PDF 文件转换为其他文本格式(如 HTML)。它有一个可扩展的PDF解析器,可用于其他目的,而不是文本分析
- pip install pdfminer3k
- from urllib.request import urlopen
- from pdfminer.converter import PDFPageAggregator
- from pdfminer.layout import LAParams
- from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
- from pdfminer.pdfparser import PDFParser, PDFDocument
- logging.Logger.propagate = False
- logging.getLogger().setLevel(logging.ERROR)
- fp = open('template/pdftest.pdf', 'rb')
- # 在线
- # fp = urlopen('http://---/---.pdf')
- # 创建一个与文档关联的解析器
- parser = PDFParser(fp)
- # PDF文档对象
- doc = PDFDocument()
- #创建pdf文档对象,存储文档结构
- document = PDFDocument(parser, password)
- # 链接解析器和文档对象
- parser.set_document(doc)
- doc.set_parser(parser)
- # 初始化文档
- doc.initialize("")
- # 创建DPF资源管理器
- resource = PDFResourceManager()
- # 参数分析器
- laparam = LAParams()
- # 聚合器
- device = PDFPageAggregator(resource, laparams=laparam)
- # 创建页面解析器
- interpreter = PDFPageInterpreter(resource, device)
- # 使用文档对象从pdf中读取内容
- for page in doc.get_pages():
- # 使用页面解析器
- interpreter.process_page(page)
- # 使用聚合器获取内容
- layout = device.get_result()
- for text_obj in layout:
- # 判断是否有get_text属性
- if hasattr(text_obj, 'get_text'):
- print(text_obj.get_text())
- # 处理包含在文档中的每一页
- for page in PDFPage.create_pages(document):
- interpreter.process_page(page)
- layout = device.get_result()
- for x in layout:
- # 获取文本对象
- if isinstance(x, LTTextBox):
- print(x.get_text().strip())
- # 获取图片对象
- if isinstance(x,LTImage):
- print('这里获取到一张图片')
- # 获取 figure 对象
- if isinstance(x,LTFigure):
- print('这里获取到一个 figure 对象')
详细的操作可参考 官网:https://github.com/canserhat77/pdfminer3k
通过上述2款Python库,就可以实现从页面到文本元数据的编辑,本文只是简单的介绍了每项的基本用法。关于详细的用法和函数列表,可以阅读官方文档,或者阅读GitHub上项目源码进行了解。
分享标题:用Python实现一款永久免费的PDF编辑工具
转载来于:http://www.shufengxianlan.com/qtweb/news49/555249.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联