欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)PyPDF2處理PDF文件的方法示例

 更新時(shí)間:2019年09月25日 10:40:39   作者:星火燎原2016  
這篇文章主要介紹了Python實(shí)現(xiàn)PyPDF2處理PDF文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

實(shí)際應(yīng)用中,可能會(huì)涉及處理 pdf 文件,PyPDF2 就是這樣一個(gè)庫(kù),使用它可以輕松的處理 pdf 文件,它提供了讀,割,合并,文件轉(zhuǎn)換等多種操作。

文檔地址:http://pythonhosted.org/PyPDF2/

PyPDF2 安裝

PyCharm 安裝:File -> Default Settings -> Project Interpreter

這里寫圖片描述

PdfFileReader

構(gòu)造方法:

PyPDF2.PdfFileReader(stream,strict = True,warndest = None,overwriteWarnings = True)

初始化一個(gè) PdfFileReader 對(duì)象,此操作可能需要一些時(shí)間,因?yàn)?PDF 流的交叉引用表被讀入內(nèi)存。

參數(shù):

  • stream:*File 對(duì)象或支持與 File 對(duì)象類似的標(biāo)準(zhǔn)讀取和查找方法的對(duì)象,也可以是表示 PDF 文件路徑的字符串。
  • *strict(bool): 確定是否應(yīng)該警告用戶所用的問題,也導(dǎo)致一些可糾正的問題是致命的,默認(rèn)是 True
  • warndest : 記錄警告的目標(biāo)(默認(rèn)是 sys.stderr)
  • overwriteWarnings(bool):確定是否 warnings.py 用自定義實(shí)現(xiàn)覆蓋 Python 模塊(默認(rèn)為 True)

PdfFileReader 對(duì)象的屬性和方法

屬性和方法 描述
getDestinationPageNumber(destination) 檢索給定目標(biāo)對(duì)象的頁(yè)碼
getDocumentInfo() 檢索 PDF 文件的文檔信息字典
getFields(tree = None,retval = None,fileObj= None) 如果此 PDF 包含交互式表單字段,則提取字段數(shù)據(jù),
getFormTextFields() 從文檔中檢索帶有文本數(shù)據(jù)(輸入,下拉列表)的表單域
getNameDestinations(tree = None,retval= None) 檢索文檔中的指定目標(biāo)
getNumPages() 計(jì)算此 PDF 文件中的頁(yè)數(shù)
getOutlines(node = None,outline = None,) 檢索文檔中出現(xiàn)的文檔大綱
getPage(pageNumber) 從這個(gè) PDF 文件中檢索指定編號(hào)的頁(yè)面
getPageLayout() 獲取頁(yè)面布局
getPageMode() 獲取頁(yè)面模式
getPageNumber(pageObject) 檢索給定 pageObject 處于的頁(yè)碼
getXmpMetadata() 從 PDF 文檔根目錄中檢索 XMP 數(shù)據(jù)
isEncrypted 顯示 PDF 文件是否加密的只讀布爾屬性
namedDestinations 訪問該getNamedDestinations()函數(shù)的只讀屬性

PDF 讀取操作:

# encoding:utf-8
from PyPDF2 import PdfFileReader, PdfFileWriter

readFile = 'C:/Users/Administrator/Desktop/RxJava 完全解析.pdf'
# 獲取 PdfFileReader 對(duì)象
pdfFileReader = PdfFileReader(readFile) # 或者這個(gè)方式:pdfFileReader = PdfFileReader(open(readFile, 'rb'))
# 獲取 PDF 文件的文檔信息
documentInfo = pdfFileReader.getDocumentInfo()
print('documentInfo = %s' % documentInfo)
# 獲取頁(yè)面布局
pageLayout = pdfFileReader.getPageLayout()
print('pageLayout = %s ' % pageLayout)

# 獲取頁(yè)模式
pageMode = pdfFileReader.getPageMode()
print('pageMode = %s' % pageMode)

xmpMetadata = pdfFileReader.getXmpMetadata()
print('xmpMetadata = %s ' % xmpMetadata)

# 獲取 pdf 文件頁(yè)數(shù)
pageCount = pdfFileReader.getNumPages()

print('pageCount = %s' % pageCount)
for index in range(0, pageCount):
  # 返回指定頁(yè)編號(hào)的 pageObject
  pageObj = pdfFileReader.getPage(index)
  print('index = %d , pageObj = %s' % (index, type(pageObj))) # <class 'PyPDF2.pdf.PageObject'>
  # 獲取 pageObject 在 PDF 文檔中處于的頁(yè)碼
  pageNumber = pdfFileReader.getPageNumber(pageObj)
  print('pageNumber = %s ' % pageNumber)

輸出結(jié)果:

documentInfo = {'/Title': IndirectObject(157, 0), '/Producer': IndirectObject(158, 0), '/Creator': IndirectObject(159, 0), '/CreationDate': IndirectObject(160, 0), '/ModDate': IndirectObject(160, 0), '/Keywords': IndirectObject(161, 0), '/AAPL:Keywords': IndirectObject(162, 0)}
pageLayout = None
pageMode = None
xmpMetadata = None
pageCount = 3
index = 0 , pageObj = <class 'PyPDF2.pdf.PageObject'>
pageNumber = 0
index = 1 , pageObj = <class 'PyPDF2.pdf.PageObject'>
pageNumber = 1
index = 2 , pageObj = <class 'PyPDF2.pdf.PageObject'>
pageNumber = 2

PdfFileWriter

這個(gè)類支持 PDF 文件,給出其他類生成的頁(yè)面。

屬性和方法 描述
addAttachment(fname,fdata) 在 PDF 中嵌入文件
addBlankPage(width= None,height=None) 追加一個(gè)空白頁(yè)面到這個(gè) PDF 文件并返回它
addBookmark(title,pagenum,parent=None,
color=None,bold=False,italic=False,fit='/fit,*args')
addJS(javascript) 添加將在打開此 PDF 是啟動(dòng)的 javascript
addLink(pagenum,pagedest,rect,border=None,fit='/fit',*args) 從一個(gè)矩形區(qū)域添加一個(gè)內(nèi)部鏈接到指定的頁(yè)面
addPage(page) 添加一個(gè)頁(yè)面到這個(gè)PDF 文件,該頁(yè)面通常從 PdfFileReader 實(shí)例獲取
getNumpages() 頁(yè)數(shù)
getPage(pageNumber) 從這個(gè) PDF 文件中檢索一個(gè)編號(hào)的頁(yè)面
insertBlankPage(width=None,height=None,index=0) 插入一個(gè)空白頁(yè)面到這個(gè) PDF 文件并返回它,如果沒有指定頁(yè)面大小,就使用最后一頁(yè)的大小
insertPage(page,index=0) 在這個(gè) PDF 文件中插入一個(gè)頁(yè)面,該頁(yè)面通常從 PdfFileReader 實(shí)例獲取
removeLinks() 從次數(shù)出中刪除連接盒注釋
removeText(ignoreByteStringObject = False) 從這個(gè)輸出中刪除圖像
write(stream) 將添加到此對(duì)象的頁(yè)面集合寫入 PDF 文件

PDF 寫入操作:

def addBlankpage():
  readFile = 'C:/Users/Administrator/Desktop/RxJava 完全解析.pdf'
  outFile = 'C:/Users/Administrator/Desktop/copy.pdf'
  pdfFileWriter = PdfFileWriter()

  # 獲取 PdfFileReader 對(duì)象
  pdfFileReader = PdfFileReader(readFile) # 或者這個(gè)方式:pdfFileReader = PdfFileReader(open(readFile, 'rb'))
  numPages = pdfFileReader.getNumPages()

  for index in range(0, numPages):
    pageObj = pdfFileReader.getPage(index)
    pdfFileWriter.addPage(pageObj) # 根據(jù)每頁(yè)返回的 PageObject,寫入到文件
    pdfFileWriter.write(open(outFile, 'wb'))

  pdfFileWriter.addBlankPage()  # 在文件的最后一頁(yè)寫入一個(gè)空白頁(yè),保存至文件中
  pdfFileWriter.write(open(outFile,'wb'))

結(jié)果是:在寫入的 copy.pdf 文檔的最后最后一頁(yè)寫入了一個(gè)空白頁(yè)。

分割文檔(取第五頁(yè)之后的頁(yè)面)

def splitPdf():
  readFile = 'C:/Users/Administrator/Desktop/RxJava 完全解析.pdf'
  outFile = 'C:/Users/Administrator/Desktop/copy.pdf'
  pdfFileWriter = PdfFileWriter()

  # 獲取 PdfFileReader 對(duì)象
  pdfFileReader = PdfFileReader(readFile) # 或者這個(gè)方式:pdfFileReader = PdfFileReader(open(readFile, 'rb'))
  # 文檔總頁(yè)數(shù)
  numPages = pdfFileReader.getNumPages()

  if numPages > 5:
    # 從第五頁(yè)之后的頁(yè)面,輸出到一個(gè)新的文件中,即分割文檔
    for index in range(5, numPages):
      pageObj = pdfFileReader.getPage(index)
      pdfFileWriter.addPage(pageObj)
    # 添加完每頁(yè),再一起保存至文件中
    pdfFileWriter.write(open(outFile, 'wb'))

合并文檔

def mergePdf(inFileList, outFile):
  '''
  合并文檔
  :param inFileList: 要合并的文檔的 list
  :param outFile:  合并后的輸出文件
  :return:
  '''
  pdfFileWriter = PdfFileWriter()
  for inFile in inFileList:
    # 依次循環(huán)打開要合并文件
    pdfReader = PdfFileReader(open(inFile, 'rb'))
    numPages = pdfReader.getNumPages()
    for index in range(0, numPages):
      pageObj = pdfReader.getPage(index)
      pdfFileWriter.addPage(pageObj)

    # 最后,統(tǒng)一寫入到輸出文件中
    pdfFileWriter.write(open(outFile, 'wb'))

PageObject

PageObject(pdf=None,indirectRef=None)

此類表示 PDF 文件中的單個(gè)頁(yè)面,通常這個(gè)對(duì)象是通過訪問 PdfFileReader 對(duì)象的 getPage() 方法來(lái)得到的,也可以使用 createBlankPage() 靜態(tài)方法創(chuàng)建一個(gè)空的頁(yè)面。

參數(shù):

  • pdf : 頁(yè)面所屬的 PDF 文件。
  • indirectRef:將源對(duì)象的原始間接引用存儲(chǔ)在其源 PDF 中。

PageObject 對(duì)象的屬性和方法

屬性或方法 描述
static createBlankPage(pdf=None,width=None,height=None) 返回一個(gè)新的空白頁(yè)面
extractText() 找到所有文本繪圖命令,按照他們?cè)趦?nèi)容流中提供的順序,并提取文本
getContents() 訪問頁(yè)面內(nèi)容,返回 Contents 對(duì)象或 None
rotateClockwise(angle) 順時(shí)針旋轉(zhuǎn) 90 度
scale(sx,sy) 通過向其內(nèi)容應(yīng)用轉(zhuǎn)換矩陣并更新頁(yè)面大小

粗略讀取 PDF 文本內(nèi)容

def getPdfContent(filename):
  pdf = PdfFileReader(open(filename, "rb"))
  content = ""
  for i in range(0, pdf.getNumPages()):
    pageObj = pdf.getPage(i)

    extractedText = pageObj.extractText()
    content += extractedText + "\n"
    # return content.encode("ascii", "ignore")
  return content

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)讀取及寫入csv文件的方法示例

    Python實(shí)現(xiàn)讀取及寫入csv文件的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)讀取及寫入csv文件的方法,涉及Python針對(duì)csv格式文件的讀取、遍歷、寫入等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Keras Convolution1D與Convolution2D區(qū)別說明

    Keras Convolution1D與Convolution2D區(qū)別說明

    這篇文章主要介紹了Keras Convolution1D與Convolution2D區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-05-05
  • 淺析Python中的方法重載

    淺析Python中的方法重載

    方法重載在?Python?中起著至關(guān)重要的作用,?這篇文章主要為大家詳細(xì)介紹了Python中方法重載及其優(yōu)點(diǎn)的相關(guān)知識(shí),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-10-10
  • Python進(jìn)行WPS自動(dòng)化的詳細(xì)指南

    Python進(jìn)行WPS自動(dòng)化的詳細(xì)指南

    由于 WPS 與 Microsoft Office 在接口上有一定的兼容性,可通過類似的技術(shù)實(shí)現(xiàn)自動(dòng)化操作,但需注意 WPS 特有的 API 或限制,所以本文給大家介紹了Python進(jìn)行WPS自動(dòng)化的詳操作指南,需要的朋友可以參考下
    2025-03-03
  • 詳解Python如何使用PyBuilder從零開始構(gòu)建項(xiàng)目

    詳解Python如何使用PyBuilder從零開始構(gòu)建項(xiàng)目

    PyBuilder是一個(gè)用于構(gòu)建Python項(xiàng)目的工具,它提供了一種簡(jiǎn)單而強(qiáng)大的方式來(lái)管理項(xiàng)目的依賴、運(yùn)行測(cè)試、生成文檔等任務(wù),下面就跟隨小編一起來(lái)學(xué)習(xí)一下如何使用PyBuilder構(gòu)建項(xiàng)目吧
    2024-03-03
  • python雙向循環(huán)鏈表實(shí)例詳解

    python雙向循環(huán)鏈表實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了python雙向循環(huán)鏈表實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python tkinter實(shí)現(xiàn)界面切換的示例代碼

    python tkinter實(shí)現(xiàn)界面切換的示例代碼

    今天小編就為大家分享一篇python tkinter實(shí)現(xiàn)界面切換的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-06-06
  • python re庫(kù)的正則表達(dá)式入門學(xué)習(xí)教程

    python re庫(kù)的正則表達(dá)式入門學(xué)習(xí)教程

    這篇文章主要給大家介紹了關(guān)于python re庫(kù)的正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python將視頻轉(zhuǎn)換為圖片介紹

    Python將視頻轉(zhuǎn)換為圖片介紹

    大家好,本篇文章主要講的是Python將視頻轉(zhuǎn)換為圖片介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 推薦Python小白理想的IDE編輯器thonny

    推薦Python小白理想的IDE編輯器thonny

    這篇文章主要為大家介紹了推薦一款Python編輯器thonny,非常適合Python使用,具體原因文中給出詳細(xì)說明,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10

最新評(píng)論