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

Python使用PyPDF2庫實(shí)現(xiàn)向PDF文件中插入內(nèi)容

 更新時(shí)間:2024年04月02日 09:30:17   作者:傻啦嘿喲  
Python的PyPDF2庫是一個(gè)強(qiáng)大的工具,它允許我們方便地操作PDF文件,包括合并、拆分、旋轉(zhuǎn)頁面等操作,下面我們就來看看如何使用PyPDF2庫實(shí)現(xiàn)向PDF文件中插入內(nèi)容吧

一、引言

PDF(Portable Document Format)文件因其跨平臺(tái)、不易被篡改的特性,廣泛應(yīng)用于日常辦公和文檔交流中。在實(shí)際應(yīng)用中,我們經(jīng)常需要將一個(gè)PDF文件的內(nèi)容插入到另一個(gè)PDF文件的指定位置。這通常需要使用專門的PDF處理工具或庫來完成。Python的PyPDF2庫就是這樣一個(gè)強(qiáng)大的工具,它允許我們方便地操作PDF文件,包括合并、拆分、旋轉(zhuǎn)頁面等操作。

二、PyPDF2庫的安裝

首先,我們需要安裝PyPDF2庫??梢允褂胮ip命令進(jìn)行安裝:

pip install PyPDF2

三、PyPDF2庫的基本使用

PyPDF2庫提供了多個(gè)類和方法,用于處理PDF文件。其中,PdfFileReader類用于讀取PDF文件的內(nèi)容,而PdfFileWriter類則用于創(chuàng)建和寫入PDF文件。

下面是一個(gè)簡單的示例,演示如何使用PyPDF2庫合并兩個(gè)PDF文件:

from PyPDF2 import PdfFileReader, PdfFileWriter  
  
# 創(chuàng)建PDF寫入對(duì)象  
output = PdfFileWriter()  
  
# 讀取第一個(gè)PDF文件  
input1 = PdfFileReader(open("file1.pdf", "rb"))  
  
# 讀取第二個(gè)PDF文件  
input2 = PdfFileReader(open("file2.pdf", "rb"))  
  
# 將第一個(gè)PDF文件的所有頁面添加到輸出文件中  
for i in range(input1.getNumPages()):  
    output.addPage(input1.getPage(i))  
  
# 將第二個(gè)PDF文件的所有頁面添加到輸出文件中  
for i in range(input2.getNumPages()):  
    output.addPage(input2.getPage(i))  
  
# 將合并后的PDF文件寫入到新的文件中  
with open("output.pdf", "wb") as outputStream:  
    output.write(outputStream)

四、在PDF文件中插入內(nèi)容

要在第一個(gè)PDF文件的中間插入第二個(gè)PDF文件的內(nèi)容,我們需要對(duì)上面的代碼進(jìn)行一些修改。具體步驟如下:

讀取第一個(gè)和第二個(gè)PDF文件。

將第一個(gè)PDF文件的部分頁面添加到輸出文件中。

將第二個(gè)PDF文件的所有頁面添加到輸出文件中。

將第一個(gè)PDF文件的剩余頁面添加到輸出文件中。

將合并后的PDF文件寫入到新的文件中。

下面是一個(gè)完整的示例代碼:

from PyPDF2 import PdfFileReader, PdfFileWriter  
  
# 定義要插入的起始頁碼  
insert_start_page = 3  # 假設(shè)要在第一個(gè)PDF文件的第3頁后插入第二個(gè)PDF文件的內(nèi)容  
  
# 創(chuàng)建PDF寫入對(duì)象  
output = PdfFileWriter()  
  
# 讀取第一個(gè)PDF文件  
input1 = PdfFileReader(open("file1.pdf", "rb"))  
  
# 讀取第二個(gè)PDF文件  
input2 = PdfFileReader(open("file2.pdf", "rb"))  
  
# 將第一個(gè)PDF文件的前insert_start_page-1頁添加到輸出文件中  
for i in range(insert_start_page - 1):  
    output.addPage(input1.getPage(i))  
  
# 將第二個(gè)PDF文件的所有頁面添加到輸出文件中  
for i in range(input2.getNumPages()):  
    output.addPage(input2.getPage(i))  
  
# 將第一個(gè)PDF文件的剩余頁面添加到輸出文件中  
for i in range(insert_start_page - 1, input1.getNumPages()):  
    output.addPage(input1.getPage(i))  
  
# 將合并后的PDF文件寫入到新的文件中  
with open("output.pdf", "wb") as outputStream:  
    output.write(outputStream)

在上面的代碼中,我們定義了一個(gè)變量insert_start_page,表示要在第一個(gè)PDF文件的哪一頁后插入第二個(gè)PDF文件的內(nèi)容。然后,我們通過循環(huán)將第一個(gè)PDF文件的前insert_start_page-1頁和剩余頁面分別添加到輸出文件中,并在中間插入了第二個(gè)PDF文件的所有頁面。

五、注意事項(xiàng)和擴(kuò)展

在處理大文件或需要高性能的場景時(shí),可以考慮使用其他更高效的PDF處理庫,如PyMuPDF(fitz)或pdfplumber。

PyPDF2庫在處理復(fù)雜的PDF文件(如包含加密、數(shù)字簽名或特殊字體)時(shí)可能會(huì)遇到一些問題。在實(shí)際應(yīng)用中,需要根據(jù)具體情況選擇合適的庫和工具。

如果需要更精細(xì)地控制PDF文件的布局和格式,可以考慮使用專業(yè)的PDF編輯軟件或庫進(jìn)行手動(dòng)編輯或編程處理。

六、知識(shí)補(bǔ)充

除了向PDF中插入內(nèi)容,小編還為大家整理了一些其他PyPDF2庫操作PDF的方法,感興趣的可以了解下

讀取PDF中的內(nèi)容

# author:mlnt
# createdate:2022/8/16
import PyPDF2    # 導(dǎo)入PyPDF2模塊

# 官方文檔:https://pypi.org/project/PyPDF2/
# 1.打開PDF文件
pdf = open(file='test.pdf', mode='rb')  # 以二進(jìn)制方式打開

# 2.獲取PDF文件的頁數(shù)
# 打開PDF文件成功后,可使用PdfFileReader()方法讀取PDF內(nèi)容
pdf_reader = PyPDF2.PdfFileReader(pdf)  # 讀取PDF內(nèi)容
print(f'PDF頁數(shù)為:{pdf_reader.numPages}')
print(f'PDF頁數(shù)為:{len(pdf_reader.pages)}')

# 3.讀取PDF頁面內(nèi)容
"""
- 使用PdfFileReader()方法讀取PDF文件后,可使用getPage(n)(或pages[n])獲取第n頁的PDF內(nèi)容
- PDF頁面從第0頁開始計(jì)算
- 頁面內(nèi)容被讀入后,可使用extractText()取得該頁的字符串內(nèi)容
"""
for i in range(pdf_reader.numPages):
    pageObj = pdf_reader.getPage(i)  # 讀取第i頁內(nèi)容
    # pageObj = pdf_reader.pages[i]  # 讀取第i頁內(nèi)容
    page_content = pageObj.extractText()  # 提取頁面內(nèi)容
    print(page_content)

PDF簡單加密與解密

# author:mlnt
# createdate:2022/8/16

import PyPDF2
from PyPDF2 import PdfReader, PdfWriter


def checkEncrypted(filename):
    """檢查文件是否加密"""
    pdfObj = open(file=filename, mode='rb')  # 以二進(jìn)制方式打開
    pdfRd = PyPDF2.PdfFileReader(pdfObj)  # 讀取PDF內(nèi)容
    # 判斷文件是否加密
    if pdfRd.isEncrypted:
        print(f'{filename}屬于加密文件')
    else:
        print(f'{filename}未加密')


def pdfEncrypt(filename):
    """pdf加密"""
    reader = PdfReader(filename)  # 創(chuàng)建RdfReader對(duì)象
    writer = PdfWriter()  # 創(chuàng)建PdfWriter對(duì)象

    # 將所有頁面添加到writer
    for page in reader.pages:
        # PDF頁面旋轉(zhuǎn)
        page.rotate_clockwise(90)  # 旋轉(zhuǎn)90度
        page.rotate_clockwise(-180)  # 逆時(shí)針旋轉(zhuǎn)180度
        writer.add_page(page)

    # 添加密碼
    writer.encrypt('123456')

    new_name = filename[:filename.rfind('.pdf')] + '-encrypted.pdf'
    # 保存pdf
    with open(new_name, 'wb') as f:
        writer.write(f)


def pdfDecrypt(filename):
    """pdf解密"""
    reader = PdfReader(filename)
    writer = PdfWriter()

    # 判斷是否加密
    if reader.isEncrypted:
        reader.decrypt('123456')

    for page in reader.pages:
        writer.add_page(page)

    new_name = filename[:filename.rfind('.pdf')] + '-decrypted.pdf'
    # 保存pdf
    with open(new_name, 'wb') as f:
        writer.write(f)


checkEncrypted('test.pdf')
pdfEncrypt('test.pdf')
pdfDecrypt('test-encrypted.pdf')

合并PDF文件

# author:mlnt
# createdate:2022/8/16
from PyPDF2 import PdfMerger

merger = PdfMerger()  # 創(chuàng)建PdfMerger對(duì)象

pdf1 = open('test.pdf', 'rb')

pdf2 = open('watermark.pdf', 'rb')

# 將整個(gè)文檔添加到merger
merger.append(fileobj=pdf1)

# 將pdf2插入到merger,從第0頁開始
merger.merge(position=0, fileobj=pdf2)

with open('merger-test.pdf', 'wb') as f:
    merger.write(f)

merger.close()

七、總結(jié)

通過本文的介紹,我們了解了如何使用Python的PyPDF2庫將一個(gè)PDF文件的內(nèi)容插入到另一個(gè)PDF文件的指定位置。通過合理的代碼組織和注釋,新手朋友可以更容易地理解并掌握這一技術(shù)。當(dāng)然,PyPDF2庫只是眾多PDF處理工具之一,根據(jù)實(shí)際需求,我們還可以選擇其他更適合的庫或工具來完成PDF文件的處理工作。

到此這篇關(guān)于Python使用PyPDF2庫實(shí)現(xiàn)向PDF文件中插入內(nèi)容的文章就介紹到這了,更多相關(guān)Python PyPDF2向PDF插入內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你搞懂Python中的pyc文件

    一文帶你搞懂Python中的pyc文件

    Python是一門解釋性語言,沒有嚴(yán)格意義上的編譯和匯編過程。Pyc文件是py編譯過程中產(chǎn)生的字節(jié)碼文件,可以由虛擬機(jī)直接執(zhí)行,是python將目標(biāo)源碼編譯成字節(jié)碼以后在磁盤上的文件形式。本文就來聊聊pyc文件的寫入等只是,感興趣的可以了解一下
    2022-12-12
  • python自動(dòng)化測試之從命令行運(yùn)行測試用例with verbosity

    python自動(dòng)化測試之從命令行運(yùn)行測試用例with verbosity

    這篇文章主要介紹了python自動(dòng)化測試之從命令行運(yùn)行測試用例with verbosity,是一個(gè)較為經(jīng)典的自動(dòng)化測試實(shí)例,需要的朋友可以參考下
    2014-09-09
  • Python二叉樹定義與遍歷方法實(shí)例分析

    Python二叉樹定義與遍歷方法實(shí)例分析

    這篇文章主要介紹了Python二叉樹定義與遍歷方法,結(jié)合實(shí)例形式分析了二叉樹的概念、原理及Python定義、遍歷二叉樹相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Python模塊介紹與使用詳細(xì)講解

    Python模塊介紹與使用詳細(xì)講解

    這篇文章主要介紹了Python模塊介紹與使用詳細(xì)講解,包括模塊的相關(guān)概念和使用方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 讀寫json中文ASCII亂碼問題的解決方法

    讀寫json中文ASCII亂碼問題的解決方法

    下面小編就為大家?guī)硪黄x寫json中文ASCII亂碼問題的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • Pytest 使用簡介

    Pytest 使用簡介

    這篇文章主要介紹了Pytest 使用簡介,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python利用標(biāo)簽實(shí)現(xiàn)清理微信好友的自動(dòng)化腳本

    Python利用標(biāo)簽實(shí)現(xiàn)清理微信好友的自動(dòng)化腳本

    微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?隨著使用時(shí)間的增長,我們的微信好友列表可能會(huì)變得越來越臃腫,所以本文為大家準(zhǔn)備了通過標(biāo)簽清理微信好友的Python自動(dòng)化腳本,希望對(duì)大家有所幫助
    2024-12-12
  • pytorch中的numel函數(shù)用法說明

    pytorch中的numel函數(shù)用法說明

    這篇文章主要介紹了pytorch中的numel函數(shù)用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • python刪除目錄的三種方法

    python刪除目錄的三種方法

    本文主要介紹了python刪除目錄的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • python matplotlib 注釋文本箭頭簡單代碼示例

    python matplotlib 注釋文本箭頭簡單代碼示例

    這篇文章主要介紹了python matplotlib 注釋文本箭頭簡單代碼示例,具有一定借鑒價(jià)值。
    2018-01-01

最新評(píng)論