用Python实现一款永久免费的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], [0, 0, 0]) 
  • 旋转
  
 
  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上项目源码进行了解。

 

分享标题:用Python实现一款永久免费的PDF编辑工具
转载来于:http://www.shufengxianlan.com/qtweb/news49/555249.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联