用Python实现一款永久免费的PDF编辑工具

新闻 开发工具
PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档...很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。

 前言:

PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档...很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。

[[338709]]永久免费的PDF编辑工具">

但是在可编辑性方面却为使用者引入了另外一个困扰。

曾经,为了替换PDF中的一页,我几乎试遍了所有市面上主流的PDF工具,最终还是不得不选择使用付费工具来解决问题。

事后想了想,既然这些商业化软件不靠谱,为什么不考虑自己动手开发一款工具呢?明明几十行代码能够解决的问题,为什么要费那么多劲去下载、安装那些没有节操的软件呢?

本文就来介绍一下利用Python轻松开发一款PDF编辑工具,可以用于PDF转TxT、分割、合并、剪切、转换。

有请主角登场 PyPDF2 和 pdfminer3k

PyPDF2

简介:由纯 Python 构建的PDF 工具包。它能够:

  • 提取文档信息(标题、作者等)
  • 一页拆分文档
  • 按页合并文档
  • 裁剪页面
  • 将多个页面合并到单个页面中
  • 加密和解密 PDF 文件

安装

直接使用pip安装

  1. pip install PyPDF2 

代码操作

  • 简单的读写PDF操作
  1. from PyPDF2 import PdfFileReader, PdfFileWriter 
  2. infn = 'infn.pdf' 
  3. outfn = 'outfn.pdf' 
  4. # 获取一个 PdfFileReader 对象 
  5. pdf_input = PdfFileReader(open(infn, 'rb')) 
  6. # 获取PDF 的基本信息 
  7. information =pdf_input.getDocumentInfo() 
  8. print(information) 
  9. # 获取 PDF 的页数 
  10. page_count = pdf_input.getNumPages() 
  11. print(page_count) 
  12. # 返回一个 PageObject 
  13. page = pdf_input.getPage(i) 
  14.  
  15. # 获取一个 PdfFileWriter 对象 
  16. pdf_output = PdfFileWriter() 
  17. # 将一个 PageObject 加入到 PdfFileWriter 中 
  18. pdf_output.addPage(page) 
  19. # 输出到文件中 
  20. pdf_output.write(open(outfn, 'wb')) 
  • 删除PDF页
  1. from PyPDF2 import PdfFileWriter,  PdfFileReader 
  2.  
  3. # 实例化一个输出的PDF实例 
  4. output = PdfFileWriter() 
  5. #  读取一个PDF文件 
  6. input1 = PdfFileReader(open("example.pdf""rb"))  
  7.  
  8. # 要删除的操作 
  9. def delete_pdf(index): 
  10.             pages = input1.getNumPages()  
  11. # 循环删除 
  12.      for i in range(pages): 
  13.       if i+1 in index: 
  14.        continue 
  15.       output.addPage(input1.getPage(i))  
  16.  
  17.      outputStream = open("PyPDF2-output.pdf""wb"
  18.      output.write(outputStream)   
  19.  
  20. delete_pdf([2,3,4]) 
  • 合并PDF
  1. from PyPDF2 import PdfFileWriter, PdfFileReader 
  2.  
  3. output = PdfFileWriter() 
  4. input1 = PdfFileReader(open("example.pdf""rb")) 
  5. input2 = PdfFileReader(open("simple2.pdf""rb")) // 1 
  6.  
  7. def merge_pdf(add_index, origin_index): 
  8.          pages = input1.getNumPages() 
  9.          k = 0 
  10.          for i in range(pages): 
  11.           if i+1 in add_index: 
  12.                output.addPage(input2.getPage(origin_index[k])) // 2 
  13.                pages += 1 
  14.                k += 1 
  15.               output.addPage(input1.getPage(i)) 
  16.  
  17.          outputStream = open("PyPDF2-output.pdf""wb"
  18.          output.write(outputStream) 
  19.  
  20. merge_pdf([2,3,4], [000]) 
  • 旋转
  1. # 旋转90度 
  2. input1.getPage(1).rotateClockwise(90
  • 添加水印
  1. page = input1.getPage(3
  2. watermark = PdfFileReader(open("watermark.pdf""rb")) 
  3. page.mergePage(watermark.getPage(0)) 
  • 加密
  1. password = "secret" 
  2. output.encrypt(password) 
  • 解密
  1. print(output.decrypt('secret'))# secret==正确口令显示1,其他显示0 
  2. page_obj= output.getPage(0)# 这样才能正确读取 
  3. print(page_obj.extractText()) 

pdfminer3k

  • 简介

pdfminer3k 是一个 Python 3 端口的 pdfminer 。PDFMiner 是一个从 PDF 文档中提取信息的工具。与其他与 PDF 相关的工具不同,它完全侧重于获取和分析文本数据。PDFMiner 允许获取页面中文本的确切位置,以及其他信息,如字体或线条。它包括一个 PDF 转换器,可以将 PDF 文件转换为其他文本格式(如 HTML)。它有一个可扩展的PDF解析器,可用于其他目的,而不是文本分析

    • 能够准确获取文本的位置和布局信息;
    • 可以将PDF转换为HTML/XML等格式;
    • 可以提取目录;
    • 可以提取标签内容;
    • 支持各种字体类型(Type1、TrueType、Type3和CID);
    • 支持中、日、韩语言和垂直书写文本;
  • 安装
  1. pip install pdfminer3k 
  • 文件的操作
  1. from urllib.request import urlopen 
  2.  
  3. from pdfminer.converter import PDFPageAggregator 
  4. from pdfminer.layout import LAParams 
  5. from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
  6. from pdfminer.pdfparser import PDFParser, PDFDocument 
  7.  
  8. logging.Logger.propagate = False 
  9. logging.getLogger().setLevel(logging.ERROR) 
  10.  
  11. fp = open('template/pdftest.pdf''rb'
  12. # 在线 
  13. # fp = urlopen('http://---/---.pdf'
  14.  
  15. # 创建一个与文档关联的解析器 
  16. parser = PDFParser(fp) 
  17.  
  18. # PDF文档对象 
  19. doc = PDFDocument() 
  20.  
  21. #创建pdf文档对象,存储文档结构 
  22. document = PDFDocument(parser, password) 
  23.  
  24. # 链接解析器和文档对象 
  25. parser.set_document(doc) 
  26. doc.set_parser(parser) 
  27.  
  28. # 初始化文档 
  29. doc.initialize(""
  30.  
  31. # 创建DPF资源管理器 
  32. resource = PDFResourceManager() 
  33.  
  34. # 参数分析器 
  35. laparam = LAParams() 
  36.  
  37. # 聚合器 
  38. device = PDFPageAggregator(resource, laparams=laparam) 
  39.  
  40. # 创建页面解析器 
  41. interpreter = PDFPageInterpreter(resource, device) 
  42.  
  43. # 使用文档对象从pdf中读取内容 
  44. for page in doc.get_pages(): 
  45.     # 使用页面解析器 
  46.     interpreter.process_page(page) 
  47.  
  48.     # 使用聚合器获取内容 
  49.     layout = device.get_result() 
  50.  
  51.     for text_obj in layout: 
  52.         # 判断是否有get_text属性 
  53.         if hasattr(text_obj, 'get_text'): 
  54.             print(text_obj.get_text()) 

 

  1. # 处理包含在文档中的每一页 
  2. for page in PDFPage.create_pages(document): 
  3.           interpreter.process_page(page) 
  4.           layout = device.get_result() 
  5.           for x in layout: 
  6.               # 获取文本对象 
  7.               if isinstance(x, LTTextBox): 
  8.                   print(x.get_text().strip()) 
  9.               # 获取图片对象 
  10.               if isinstance(x,LTImage): 
  11.                   print('这里获取到一张图片'
  12.               # 获取 figure 对象 
  13.               if isinstance(x,LTFigure): 
  14.                   print('这里获取到一个 figure 对象'

详细的操作可参考 官网:https://github.com/canserhat77/pdfminer3k

总结

通过上述2款Python库,就可以实现从页面到文本元数据的编辑,本文只是简单的介绍了每项的基本用法。关于详细的用法和函数列表,可以阅读官方文档,或者阅读GitHub上项目源码进行了解。

 

 

 

责任编辑:张燕妮 来源: 今日头条
相关推荐

2020-12-22 10:30:47

Nagios工具监控

2011-01-11 13:45:20

2020-05-26 14:15:09

开源网盘 免费

2011-01-18 14:51:48

2022-09-30 13:09:32

VSLookVS Code工具

2016-03-15 12:27:54

WireEdit可视化编辑工具网络数据包编辑器

2011-01-11 13:38:21

CPU-Z系统检测

2020-02-28 10:10:07

开源技术 工具

2015-08-07 09:44:36

开源数据中心

2018-11-26 14:30:08

Python开发工具编程语言

2021-02-16 10:58:50

ScreenLinux命令

2021-01-27 13:16:39

ScreenLinux命令

2021-07-07 06:52:17

云图word-cloud工具

2023-09-21 11:48:49

CodeGeeXAI代码

2013-10-15 09:26:12

2021-07-09 10:14:05

IP工具命令

2020-07-09 10:02:27

Python开发工具

2024-02-23 08:13:25

Excalidraw白板工具开源

2021-03-25 16:15:24

SQL工具慢查询

2011-05-10 09:55:14

点赞
收藏

51CTO技术栈公众号