日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python pypdf2另存为图片_用Python玩转PDF的各种骚操作

發布時間:2025/3/21 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python pypdf2另存为图片_用Python玩转PDF的各种骚操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文/Python數據科學? 圖片來源于網絡

Portable Document Format(可移植文檔格式),或者PDF是一種文件格式,可以用于跨操作系統的呈現和文檔交換。盡管PDF最初是由Adobe發明的,但它現在是由國際標準化組織(ISO)維護的開放標準。你可以通過使用PyPDF2包在Python中處理已先存在的PDF。

PyPDF2是一個純Python包,可用于許多不同類型的PDF操作。

本文將帶你了解如何執行以下操作:

  • 從Python中提取PDF中的文檔信息?

  • 旋轉頁面?

  • 合并PDF?

  • 拆分PDF?

  • 添加水印?

  • 加密PDF

pyPdf,PyPDF2和PyPDF4的歷史

最初的pyPdf軟件包于2005年發布。pyPdf的最后一個正式版本是在2010年。大約一年后,一家名為Phasit的公司贊助了一個名為PyPDF2的pyPdf分支。該代碼編寫為向后與原始代碼兼容,并且用了好多年,效果一直很好,其最后一個版本是在2016年。

有一個名為PyPDF3的軟件包簡短系列版本,然后該項目被重命名為PyPDF4。所有這些項目都完全相同,但pyPdf和PyPDF2 +之間的最大區別在于后者版本增加了Python 3支持。Python 3的原始pyPdf有一個不同的Python 3分支,但是這個分支已經多年沒有維護了。

雖然最近放棄了PyPDF2,但新的PyPDF4與PyPDF2沒有完全的向后兼容性。本文中的大多數示例都可以與PyPDF4完美配合,但也有一些不能,這就是為什么PyPDF4在本文中沒有更多的特色。隨意用PyPDF4替換PyPDF2的導入,看看它是如何工作的。

pdfrw:一個替代的PDF操作包

Patrick Maupin創建了一個名為pdfrw的軟件包,它可以完成許多與PyPDF2相同的工作。除了加密的特殊情況外,本文后面提到PyPDF2的所有操作,pdfrw均可以實現。

pdfrw的最大區別在于它與ReportLab軟件包集成,因此你可以使用一些或所有預先存在的PDF構建一個新的PDF。

PyPDF2的安裝

如果使用Anaconda而不是常規Python,可以使用pip或conda安裝PyPDF2。以下是使用pip安裝PyPDF2的方法:

$ pip install pypdf2

由于PyPDF2沒有任何依賴,因此安裝非常快。

如何從Python中提取PDF文檔信息

我們可以使用PyPDF2從PDF中提取元數據和一些文本,尤其是當在預先存在的PDF文件上執行某些類型的自動化時是非常有用的。

以下是當前可以提取的數據類型:

  • Author

  • Creator

  • Producer

  • Subject

  • Title

  • Number of page

可以在自己的電腦上隨便找一個PDF文件進行嘗試操作。下面是使用該PDF編寫一些代碼,并了解如何訪問這些屬性:

from PyPDF2 import PdfFileReaderdef extract_information(pdf_path):with open(pdf_path, 'rb') as f:pdf = PdfFileReader(f)information = pdf.getDocumentInfo()number_of_pages = pdf.getNumPages()txt = f""" Information about {pdf_path}: Author: {information.author} Creator: {information.creator} Producer: {information.producer} Subject: {information.subject} Title: {information.title} Number of pages: {number_of_pages} """print(txt)return informationif __name__ == '__main__':path = 'xxxx.pdf'extract_information(path)

首先從PyPDF2包導入PdfFileReader。PdfFileReader是一個具有多種與PDF文件交互的方法的類。在此示例中,我們調用了.getDocumentInfo(),它將返回DocumentInformation的實例,包含了我們感興趣的大部分信息。我們還可以在reader對象上調用.getNumPages(),讓它返回文檔中的頁數。

information這個變量具有多個實例屬性,可以使用這些屬性從文檔中獲取所需的其余元數據。我們可以打印出該信息并將其返回以備將來使用。

雖然PyPDF2具有.extractText(),可以在其頁面對象上使用提取文本(本例中未顯示),但它的效果不是很好。有些PDF會返回文本,有些會返回空字符串。如果要從PDF中提取文本,建議應該看一下PDFMiner項目。PDFMiner更加強大,專門用于從PDF中提取文本。

如何旋轉頁面?

有時候PDF是橫向模式而不是縱向模式,甚至是顛倒的。當有人掃描文檔為PDF或電子郵件時,很可能會發生這種情況。我們可以打印出文檔并閱讀紙質版本,也可以使用Python的強大功能來旋轉有問題的頁面。

下面看一下如何使用PyPDF2旋轉文章的一些頁面:

from PyPDF2 import PdfFileReader, PdfFileWriterdef rotate_pages(pdf_path):pdf_writer = PdfFileWriter()pdf_reader = PdfFileReader(path)# 順時針旋轉90度page_1 = pdf_reader.getPage(0).rotateClockwise(90)pdf_writer.addPage(page_1)# 逆時針旋轉90度page_2 = pdf_reader.getPage(1).rotateCounterClockwise(90)pdf_writer.addPage(page_2)# 在正常方向上添加一頁pdf_writer.addPage(pdf_reader.getPage(2))with open('rotate_pages.pdf', 'wb') as fh:pdf_writer.write(fh)if __name__ == '__main__':path = '新路徑.pdf'rotate_pages(path)

上面除了pdfileReader之外,還導入了pdfileWriter,因為我們需要編寫一個新的pdf。rotate_pages()獲取要修改的PDF的路徑。在這個函數中,需要創建一個可以命名為pdf-writer的writer對象和一個名為pdf-reader的reader對象。

接下來,可以使用.get page()獲取所需的頁面。上面開始輸入了第0頁,也就是第一頁,調用page對象的.rotateClockwise()順時針旋轉方法并輸入90。然后同樣地,對于第二頁,調用.rotateCounterLockwise()逆時針旋轉并輸入90。

每次調用Rotation旋轉方法后,都會調用.addPage(),這將向writer對象添加頁面的旋轉版本。最后一頁是第3頁,沒有對其進行任何旋轉。最后,使用.write()把所有新頁寫入新的PDF。

如何合并PDF?

在許多情況下,我們希望將兩個或多個PDF合并到一個PDF中。例如,現在可能有一個標準的封面,需要轉到許多類型的報告中。這時候就可以使用python來幫助完成這類工作。

下面是實現的代碼,完成PDF合并的操作:

from PyPDF2 import PdfFileReader, PdfFileWriter

def merge_pdfs(paths, output):pdf_writer = PdfFileWriter()for path in paths:pdf_reader = PdfFileReader(path)for page in range(pdf_reader.getNumPages()):# 將每頁添加到writer對象pdf_writer.addPage(pdf_reader.getPage(page))# 寫入合并的pdfwith open(output, 'wb') as out:pdf_writer.write(out)if __name__ == '__main__':paths = ['document1.pdf', 'document2.pdf']merge_pdfs(paths, output='merged.pdf')

假如有一個要合并到一起的pdf列表時,可以直接使用merge_pdf函數完成。此函數采用了輸入路徑和輸出路徑作為參數。

首先遍歷輸入的paths,并為每個輸入創建一個PDF閱讀對象。然后遍歷PDF文件中的所有頁面,并使用.addpage()將這些頁面寫入writer對象。當完成對列表中所有PDF的所有頁面的寫入后,將在末尾寫入新的結果中。

如果不想合并每個PDF的所有頁面,可以通過添加一系列要添加的頁面來稍微增強這個腳本。挑戰一點的話,也可以使用Python的argparse模塊為這個函數創建一個命令行接口。

如何拆分PDF?

有時可能需要將PDF拆分為多個PDF,對于包含大量掃描內容的PDF來說尤其重要。以下是如何使用PyPDF2將PDF拆分為多個文件:

from PyPDF2 import PdfFileReader, PdfFileWriterdef split(path, name_of_split):pdf = PdfFileReader(path)for page in range(pdf.getNumPages()):pdf_writer = PdfFileWriter()pdf_writer.addPage(pdf.getPage(page))output = f'{name_of_split}{page}.pdf'with open(output, 'wb') as output_pdf:pdf_writer.write(output_pdf)if __name__ == '__main__':path = 'xxx.pdf'split(path, 'jupyter_page')

這個函數中再次創建了PDF的reaer對象,并對其所讀取的頁面進行遍歷。對于PDF中的每個頁面,創建一個新的PDF的writer實例并向其添加單個頁面。然后,將該頁面寫入一個唯一命名的文件。腳本運行完畢后,就可以將原始PDF的每個頁面拆分為單獨的PDF。

如何添加水印?

水印是紙質或者電子文檔上的圖像或圖案,一些水印只能在特殊照明條件下才能看到。水印的重要性在于它可以保護你的知識產權,例如圖像或PDF。

我們可以使用Python和PyPDF2為文檔添加水印,而且是擁有僅包含水印圖像或文本的PDF。下面是向PDF添加水印方法:

from PyPDF2 import PdfFileWriter, PdfFileReaderdef create_watermark(input_pdf, output, watermark):watermark_obj = PdfFileReader(watermark)watermark_page = watermark_obj.getPage(0)pdf_reader = PdfFileReader(input_pdf)pdf_writer = PdfFileWriter()# 給所有頁面添加水印for page in range(pdf_reader.getNumPages()):page = pdf_reader.getPage(page)page.mergePage(watermark_page)pdf_writer.addPage(page)with open(output, 'wb') as out:pdf_writer.write(out)if __name__ == '__main__':create_watermark(input_pdf='Jupyter_Notebook_An_Introduction.pdf', output='watermarked_notebook.pdf',watermark='watermark.pdf')

上面create_watermark有三個參數:

  • input_pdf:要加水印的PDF文件路徑

  • output:要保存PDF的水印版本的路徑

  • watermark:包含水印圖像或文本的PDF

在代碼中,打開水印PDF并從文檔中抓取第一頁,因為這是水印應該駐留的位置。然后使用input_pdf和通用pdf_writer對象創建PDF的writer對象,以寫出帶水印的PDF。

下一步是遍歷input_pdf中的頁面,然后調用.mergePage()并以用上面讀取的水印對象watermark_page為參數,這樣會將watermark_page覆蓋在當前頁面的頂部,然后再將新合并的頁面添加到pdf_writer對象中。遍歷完成后,最后將新加水印的PDF寫入磁盤。

如何加密PDF?

PyPDF2目前僅支持將用戶密碼和所有者密碼添加到預先存在的PDF。在PDF版本中,所有者密碼會提供PDF的管理員權限,并允許設置文檔的權限,而用戶密碼只允許打開文檔。

實際上,PyPDF2是不允許設置文檔的任何權限的,即使它允許設置所有者密碼的情況下。但無論如何,這是可以加密的方式,也將固有地加密PDF:

from PyPDF2 import PdfFileWriter, PdfFileReaderdef add_encryption(input_pdf, output_pdf, password):pdf_writer = PdfFileWriter()pdf_reader = PdfFileReader(input_pdf)for page in range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page))pdf_writer.encrypt(user_pwd=password, owner_pwd=None, use_128bit=True)with open(output_pdf, 'wb') as fh:pdf_writer.write(fh)if __name__ == '__main__':add_encryption(input_pdf='reportlab-sample.pdf',output_pdf='reportlab-encrypted.pdf',password='twofish')

add_encryption以輸入輸出PDF路徑和要添加到PDF的密碼為參數。由于需要加密整個輸入PDF,因此需要遍歷其所有頁面并將其添加到writer編寫器。最后一步是調用.encrypt(),以用戶密碼,所有者密碼以及是否應該添加128位加密為參數。默認情況下,要啟用128位加密。如果將其設置為False,則將應用40位加密。

結論

PyPDF2包非常有用,可以使用PyPDF2自動執行腳本完成PDF文檔的批量操作。本文介紹了如何從PDF中提取元數據,旋轉頁面,合并和拆分PDF,添加水印,以及添加加密的操作。

同時,還要關注較新的PyPDF4包,因為它很快就會取代PyPDF2。也可以看看pdfrw包,它也可以執行許多與PyPDF2相同的操作。

熱 門 推 薦用Python創建微信機器人用Python機器人監聽微信群聊用Python獲取攝像頭并實時控制人臉開源項目 | 用Python美化LeetCode倉庫推薦Python中文社區旗下的幾個服務類公眾號征稿啟事 | Python中文社區有獎征文

▼ 點擊成為社區注冊會員? ? ? ? ??「在看」一下,一起PY!

總結

以上是生活随笔為你收集整理的python pypdf2另存为图片_用Python玩转PDF的各种骚操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕精品一区 | 国产不卡在线 | 亚洲综合在线播放 | 人人舔人人 | 38在线视频| 亚洲精品一区久久久久久 | 国产精品手机在线观看 | 欧美精品aa | av在线不卡免费 | 大奶子av | 色哟哟免费观看 | 免费在线观看www | 97公开视频 | 91蜜臀精品国产自偷在线 | 青青草视频黄 | 亚洲精品污一区二区三区 | 色噜噜av| 亚洲插插| 播播激情网 | 极品美女高潮出白浆 | 婷婷五月综合激情 | 国产4区| 久草福利免费 | 亚洲精品天天 | 国产a国产片国产 | 国模精品视频一区二区 | 欧美性猛交xxxx乱大交俱乐部 | 亚洲精品久久久久久久久久 | 国产一级全黄 | 在线看黄色av | 亚洲AV无码国产精品播放在线 | 精品国产乱码久久久久久影片 | 2020亚洲男人天堂 | 午夜伊人网 | 欧美日韩人妻精品一区二区三区 | 激情在线网站 | 欧美日韩一区二区三区69堂 | 牛av| a毛毛片 | 欧美午夜精品一区二区三区电影 | 玖玖爱在线精品视频 | 国产一区在线免费观看 | 国产片黄色 | 四虎新网站 | 亚洲精品三| 成人依依网 | www伊人网 | 九九热精品视频在线播放 | 91综合在线| 超碰在线免费看 | 久久合合 | 日韩欧美自拍 | 精品一区二区视频在线观看 | 午夜精品久久久久久久久 | 中文字幕在线免费播放 | 日日爽 | 男女激情在线观看 | 80日本xxxxxxxxx96 亚洲国产精品视频在线 | 撒尿free性hd | 国产精品久久久久久久久夜色 | 午夜久久久久 | 性做爰裸体按摩视频 | 成年人网站免费看 | 亚洲先锋影音 | 欧美日韩免费观看一区=区三区 | 深夜在线 | 黄色成人在线观看 | 成人一区二区视频 | 日韩国产二区 | 国产一级做a爱免费视频 | 99久久精品一区二区成人 | 国产黄色自拍视频 | 久久mm | 香蕉成视频人app下载安装 | 国产精品入口夜色视频大尺度 | 国产99久久久欧美黑人 | 91久久精品国产91性色69 | 国产一级二级三级在线观看 | 欧美日韩网址 | 国产久精品| 天天操天天干天天爱 | 蜜桃av在线播放 | 在线观看的网站 | 青青伊人精品 | 精品麻豆视频 | 91精品国产免费 | 黄网av| a级片毛片 | 日韩欧美在线第一页 | 黄色一级片在线免费观看 | 色屁屁一区二区三区视频 | 国产精品久久久一区二区三区 | 久久精品视频9 | 国产精品正在播放 | 色香影院 | 91网址入口 | 国产第一区第二区 | 美国黄色一级毛片 | 夜夜嗨aⅴ一区二区三区 |