成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Python實(shí)現(xiàn)一款永久免費(fèi)的PDF編輯工具

新聞 開(kāi)發(fā)工具
PDF(Portable Document Format),中文名稱(chēng)便攜文檔格式是我們經(jīng)常會(huì)接觸到的一種文件格式,文獻(xiàn)、文檔...很多都是PDF格式。它以格式穩(wěn)定的優(yōu)勢(shì),使得我們?cè)诖蛴 ⒎窒怼鬏斶^(guò)程中能夠最優(yōu)的保持原有色彩和格式。

 前言:

PDF(Portable Document Format),中文名稱(chēng)便攜文檔格式是我們經(jīng)常會(huì)接觸到的一種文件格式,文獻(xiàn)、文檔...很多都是PDF格式。它以格式穩(wěn)定的優(yōu)勢(shì),使得我們?cè)诖蛴 ⒎窒怼鬏斶^(guò)程中能夠最優(yōu)的保持原有色彩和格式。

[[338709]]永久免費(fèi)的PDF編輯工具">

但是在可編輯性方面卻為使用者引入了另外一個(gè)困擾。

曾經(jīng),為了替換PDF中的一頁(yè),我?guī)缀踉嚤榱怂惺忻嫔现髁鞯腜DF工具,最終還是不得不選擇使用付費(fèi)工具來(lái)解決問(wèn)題。

事后想了想,既然這些商業(yè)化軟件不靠譜,為什么不考慮自己動(dòng)手開(kāi)發(fā)一款工具呢?明明幾十行代碼能夠解決的問(wèn)題,為什么要費(fèi)那么多勁去下載、安裝那些沒(méi)有節(jié)操的軟件呢?

本文就來(lái)介紹一下利用Python輕松開(kāi)發(fā)一款PDF編輯工具,可以用于PDF轉(zhuǎn)TxT、分割、合并、剪切、轉(zhuǎn)換。

有請(qǐng)主角登場(chǎng) PyPDF2 和 pdfminer3k

PyPDF2

簡(jiǎn)介:由純 Python 構(gòu)建的PDF 工具包。它能夠:

  • 提取文檔信息(標(biāo)題、作者等)
  • 一頁(yè)拆分文檔
  • 按頁(yè)合并文檔
  • 裁剪頁(yè)面
  • 將多個(gè)頁(yè)面合并到單個(gè)頁(yè)面中
  • 加密和解密 PDF 文件

安裝

直接使用pip安裝

  1. pip install PyPDF2 

代碼操作

  • 簡(jiǎn)單的讀寫(xiě)PDF操作
  1. from PyPDF2 import PdfFileReader, PdfFileWriter 
  2. infn = 'infn.pdf' 
  3. outfn = 'outfn.pdf' 
  4. # 獲取一個(gè) PdfFileReader 對(duì)象 
  5. pdf_input = PdfFileReader(open(infn, 'rb')) 
  6. # 獲取PDF 的基本信息 
  7. information =pdf_input.getDocumentInfo() 
  8. print(information) 
  9. # 獲取 PDF 的頁(yè)數(shù) 
  10. page_count = pdf_input.getNumPages() 
  11. print(page_count) 
  12. # 返回一個(gè) PageObject 
  13. page = pdf_input.getPage(i) 
  14.  
  15. # 獲取一個(gè) PdfFileWriter 對(duì)象 
  16. pdf_output = PdfFileWriter() 
  17. # 將一個(gè) PageObject 加入到 PdfFileWriter 中 
  18. pdf_output.addPage(page) 
  19. # 輸出到文件中 
  20. pdf_output.write(open(outfn, 'wb')) 
  • 刪除PDF頁(yè)
  1. from PyPDF2 import PdfFileWriter,  PdfFileReader 
  2.  
  3. # 實(shí)例化一個(gè)輸出的PDF實(shí)例 
  4. output = PdfFileWriter() 
  5. #  讀取一個(gè)PDF文件 
  6. input1 = PdfFileReader(open("example.pdf""rb"))  
  7.  
  8. # 要?jiǎng)h除的操作 
  9. def delete_pdf(index): 
  10.             pages = input1.getNumPages()  
  11. # 循環(huán)刪除 
  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]) 
  • 旋轉(zhuǎn)
  1. # 旋轉(zhuǎn)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

  • 簡(jiǎn)介

pdfminer3k 是一個(gè) Python 3 端口的 pdfminer 。PDFMiner 是一個(gè)從 PDF 文檔中提取信息的工具。與其他與 PDF 相關(guān)的工具不同,它完全側(cè)重于獲取和分析文本數(shù)據(jù)。PDFMiner 允許獲取頁(yè)面中文本的確切位置,以及其他信息,如字體或線(xiàn)條。它包括一個(gè) PDF 轉(zhuǎn)換器,可以將 PDF 文件轉(zhuǎn)換為其他文本格式(如 HTML)。它有一個(gè)可擴(kuò)展的PDF解析器,可用于其他目的,而不是文本分析

    • 能夠準(zhǔn)確獲取文本的位置和布局信息;
    • 可以將PDF轉(zhuǎn)換為HTML/XML等格式;
    • 可以提取目錄;
    • 可以提取標(biāo)簽內(nèi)容;
    • 支持各種字體類(lèi)型(Type1、TrueType、Type3和CID);
    • 支持中、日、韓語(yǔ)言和垂直書(shū)寫(xiě)文本;
  • 安裝
  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. # 在線(xiàn) 
  13. # fp = urlopen('http://---/---.pdf'
  14.  
  15. # 創(chuàng)建一個(gè)與文檔關(guān)聯(lián)的解析器 
  16. parser = PDFParser(fp) 
  17.  
  18. # PDF文檔對(duì)象 
  19. doc = PDFDocument() 
  20.  
  21. #創(chuàng)建pdf文檔對(duì)象,存儲(chǔ)文檔結(jié)構(gòu) 
  22. document = PDFDocument(parser, password) 
  23.  
  24. # 鏈接解析器和文檔對(duì)象 
  25. parser.set_document(doc) 
  26. doc.set_parser(parser) 
  27.  
  28. # 初始化文檔 
  29. doc.initialize(""
  30.  
  31. # 創(chuàng)建DPF資源管理器 
  32. resource = PDFResourceManager() 
  33.  
  34. # 參數(shù)分析器 
  35. laparam = LAParams() 
  36.  
  37. # 聚合器 
  38. device = PDFPageAggregator(resource, laparams=laparam) 
  39.  
  40. # 創(chuàng)建頁(yè)面解析器 
  41. interpreter = PDFPageInterpreter(resource, device) 
  42.  
  43. # 使用文檔對(duì)象從pdf中讀取內(nèi)容 
  44. for page in doc.get_pages(): 
  45.     # 使用頁(yè)面解析器 
  46.     interpreter.process_page(page) 
  47.  
  48.     # 使用聚合器獲取內(nèi)容 
  49.     layout = device.get_result() 
  50.  
  51.     for text_obj in layout: 
  52.         # 判斷是否有g(shù)et_text屬性 
  53.         if hasattr(text_obj, 'get_text'): 
  54.             print(text_obj.get_text()) 

 

  1. # 處理包含在文檔中的每一頁(yè) 
  2. for page in PDFPage.create_pages(document): 
  3.           interpreter.process_page(page) 
  4.           layout = device.get_result() 
  5.           for x in layout: 
  6.               # 獲取文本對(duì)象 
  7.               if isinstance(x, LTTextBox): 
  8.                   print(x.get_text().strip()) 
  9.               # 獲取圖片對(duì)象 
  10.               if isinstance(x,LTImage): 
  11.                   print('這里獲取到一張圖片'
  12.               # 獲取 figure 對(duì)象 
  13.               if isinstance(x,LTFigure): 
  14.                   print('這里獲取到一個(gè) figure 對(duì)象'

詳細(xì)的操作可參考 官網(wǎng):https://github.com/canserhat77/pdfminer3k

總結(jié)

通過(guò)上述2款Python庫(kù),就可以實(shí)現(xiàn)從頁(yè)面到文本元數(shù)據(jù)的編輯,本文只是簡(jiǎn)單的介紹了每項(xiàng)的基本用法。關(guān)于詳細(xì)的用法和函數(shù)列表,可以閱讀官方文檔,或者閱讀GitHub上項(xiàng)目源碼進(jìn)行了解。

 

 

 

責(zé)任編輯:張燕妮 來(lái)源: 今日頭條
相關(guān)推薦

2011-01-11 13:45:20

2020-12-22 10:30:47

Nagios工具監(jiān)控

2011-01-18 14:51:48

2020-05-26 14:15:09

開(kāi)源網(wǎng)盤(pán) 免費(fèi)

2024-08-16 08:31:05

2011-01-11 13:38:21

CPU-Z系統(tǒng)檢測(cè)

2022-09-30 13:09:32

VSLookVS Code工具

2016-03-15 12:27:54

WireEdit可視化編輯工具網(wǎng)絡(luò)數(shù)據(jù)包編輯器

2025-04-21 01:00:00

DbGate數(shù)據(jù)庫(kù)開(kāi)源

2015-08-07 09:44:36

開(kāi)源數(shù)據(jù)中心

2020-02-28 10:10:07

開(kāi)源技術(shù) 工具

2021-01-27 13:16:39

ScreenLinux命令

2021-02-16 10:58:50

ScreenLinux命令

2021-07-07 06:52:17

云圖word-cloud工具

2018-11-26 14:30:08

Python開(kāi)發(fā)工具編程語(yǔ)言

2023-09-21 11:48:49

CodeGeeXAI代碼

2024-02-23 08:13:25

Excalidraw白板工具開(kāi)源

2021-03-25 16:15:24

SQL工具慢查詢(xún)

2011-05-10 09:55:14

2025-04-07 08:10:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩视频国产 | 性一交一乱一伦视频免费观看 | 欧美日韩亚洲视频 | 欧美日韩中文字幕在线 | 色综合久久天天综合网 | 国产亚洲欧美日韩精品一区二区三区 | 九九99靖品 | 最新高清无码专区 | 精品国产高清一区二区三区 | 国产91九色 | 很很干很很日 | 九九久久久| 日本在线观看视频 | 操久久久 | 婷婷成人在线 | 日韩at| 国产成人精品一区二区三区视频 | 色综合天天网 | 久久亚洲春色中文字幕久久久 | 日韩高清成人 | 成人黄在线观看 | 亚洲国产一区二区在线 | 国产成人精品一区二区在线 | 视频一区在线观看 | 97久久精品午夜一区二区 | 在线中文av | 最近中文字幕免费 | 久久这里只有精品首页 | 亚洲免费精品 | 免费观看黄 | 亚洲一区二区三区在线播放 | 无码一区二区三区视频 | 亚洲一二三视频 | 国产一级片| 在线观看av不卡 | 亚洲精品乱码 | 国产精品一区二区三级 | 黄色网毛片 | 在线看av网址 | 涩涩视频在线观看免费 | 嫩草懂你的影院入口 |