日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
用Python實現(xiàn)一款永久免費(fèi)的PDF編輯工具

 前言:

為神木等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及神木網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、網(wǎng)站制作、神木網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

PDF(Portable Document Format),中文名稱便攜文檔格式是我們經(jīng)常會接觸到的一種文件格式,文獻(xiàn)、文檔...很多都是PDF格式。它以格式穩(wěn)定的優(yōu)勢,使得我們在打印、分享、傳輸過程中能夠最優(yōu)的保持原有色彩和格式。

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

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

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

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

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

有請主角登場 PyPDF2 和 pdfminer3k

PyPDF2

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

  • 提取文檔信息(標(biāo)題、作者等)
  • 一頁拆分文檔
  • 按頁合并文檔
  • 裁剪頁面
  • 將多個頁面合并到單個頁面中
  • 加密和解密 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 的頁數(shù) 
  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. # 循環(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], [0, 0, 0]) 
  • 旋轉(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

  • 簡介

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

    • 能夠準(zhǔn)確獲取文本的位置和布局信息;
    • 可以將PDF轉(zhuǎn)換為HTML/XML等格式;
    • 可以提取目錄;
    • 可以提取標(biāo)簽內(nèi)容;
    • 支持各種字體類型(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. # 創(chuàng)建一個與文檔關(guān)聯(lián)的解析器 
  16. parser = PDFParser(fp) 
  17.  
  18. # PDF文檔對象 
  19. doc = PDFDocument() 
  20.  
  21. #創(chuàng)建pdf文檔對象,存儲文檔結(jié)構(gòu) 
  22. document = PDFDocument(parser, password) 
  23.  
  24. # 鏈接解析器和文檔對象 
  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)建頁面解析器 
  41. interpreter = PDFPageInterpreter(resource, device) 
  42.  
  43. # 使用文檔對象從pdf中讀取內(nèi)容 
  44. for page in doc.get_pages(): 
  45.     # 使用頁面解析器 
  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. # 處理包含在文檔中的每一頁 
  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 對象') 

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

總結(jié)

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

 


網(wǎng)頁題目:用Python實現(xiàn)一款永久免費(fèi)的PDF編輯工具
路徑分享:http://www.5511xx.com/article/dhggcep.html