2025年5月18日 星期日

PyPDF2 3.0.0改版後,修訂範例程式

以下的程式是利用GPT修訂。
來源:看圖學Python+Excel辦公室自動化程式設計 
因為在 PyPDF2 3.0.0 之後,PdfFileReader 已被移除,官方建議改用 PdfReader,因此修訂書中第16章的範例。
範例ch16-1.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from PyPDF2 import PdfReader
import os

pdf_path = os.path.join(os.getcwd(), "PDF", "Python海龜繪圖.pdf")
print(pdf_path)

pdfReader = PdfReader(pdf_path)
numberOfPages = len(pdfReader.pages)
print("頁數:", numberOfPages)

# 試圖取得 metadata(注意新版中有些文件可能沒有 metadata)
info = pdfReader.metadata
print("作者:", info.get('/Author'))
print("標題:", info.get('/Title'))
print("製作者:", info.get('/Producer'))

範例ch16-1a.py

1
2
3
4
5
6
7
8
9
from PyPDF2 import PdfReader
import os

pdf_path = os.path.join(os.getcwd(), "PDF", "Python海龜繪圖.pdf")
pdfReader = PdfReader(pdf_path)

for pageNo, page in enumerate(pdfReader.pages):
    text = page.extract_text()
    print(f"第 {pageNo+1} 頁內容:\n{text}\n")

範例ch16-1b.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from PyPDF2 import PdfReader, PdfWriter
import os

pdf_path = os.path.join(os.getcwd(), "PDF", "Python海龜繪圖.pdf")
pdf_output = os.path.join(os.getcwd(), "PDF", "Python海龜繪圖2.pdf")

pdfReader = PdfReader(pdf_path)
pdfWriter = PdfWriter()

# 旋轉第 1 頁 90 度
page1 = pdfReader.pages[0]
page1.rotate(90)  # 或 page1.rotate_clockwise(90)
pdfWriter.add_page(page1)

# 寫入新的 PDF 檔案
with open(pdf_output, "wb") as fp:
    pdfWriter.write(fp)

範例ch16-1c.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from PyPDF2 import PdfReader, PdfWriter
import os

pdf_path = os.path.join(os.getcwd(), "PDF", "Python海龜繪圖.pdf")
pdfReader = PdfReader(pdf_path)
fname = os.path.splitext(os.path.basename(pdf_path))[0]

for pageNo, page in enumerate(pdfReader.pages):
    pdfWriter = PdfWriter()
    pdfWriter.add_page(page)

    outputfname = os.path.join("PDF", f"{fname}_p{pageNo + 1}.pdf")
    with open(outputfname, "wb") as fp:
        pdfWriter.write(fp)
        print("分割建立PDF檔:", outputfname)

範例ch16-1d.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PyPDF2 import PdfReader, PdfWriter
import os

pdf_output = os.path.join(os.getcwd(), "PDF", "Python海龜繪圖3.pdf")

# 讀取三個單頁 PDF
pdfReader1 = PdfReader(os.path.join(os.getcwd(), "PDF", "Python海龜繪圖_p1.pdf"))
pdfReader2 = PdfReader(os.path.join(os.getcwd(), "PDF", "Python海龜繪圖_p2.pdf"))
pdfReader3 = PdfReader(os.path.join(os.getcwd(), "PDF", "Python海龜繪圖_p3.pdf"))

# 建立新的 PDF 寫入器
pdfWriter = PdfWriter()

# 加入各頁
pdfWriter.add_page(pdfReader1.pages[0])
pdfWriter.add_page(pdfReader2.pages[0])
pdfWriter.add_page(pdfReader3.pages[0])

# 寫入新檔案
with open(pdf_output, "wb") as fp:
    pdfWriter.write(fp)
    print("已合併為新 PDF:", pdf_output)

範例ch16-1e.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from PyPDF2 import PdfFileReader, PdfFileWriter
import os

pdf_path = os.getcwd()+"/PDF/Python海龜繪圖.pdf"
watermark_path = os.getcwd()+"/PDF/Python海龜繪圖_浮水印.pdf"
pdf_output = os.getcwd()+"/PDF/Python海龜繪圖4.pdf"
watermarkReader = PdfFileReader(watermark_path)
watermarkpage = watermarkReader.getPage(0)
pdfReader = PdfFileReader(pdf_path)
pdfWriter = PdfFileWriter()
for pageNo in range(pdfReader.getNumPages()):
    page = pdfReader.getPage(pageNo)
    page.mergePage(watermarkpage)
    pdfWriter.addPage(page)
with open(pdf_output, "wb") as fp:
    pdfWriter.write(fp)

沒有留言:

張貼留言