一、PDF 文件的常見操作
現在,PDF 文件已經成為了文檔交換和共享的主要文檔格式,它一般用來保存排版比較複雜的文檔,比如報告、期刊、合同等。在 Python 中,我們可以使用 PyPDF2 來操作 PDF 文件,比如讀取、寫入、拆分、合併、加密、解密等。下面,我們將對這些常見的操作進行介紹。
1、讀取 PDF 文件
import PyPDF2 pdfFileObj = open('example.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) print("總頁數:", pdfReader.numPages) for page in range(pdfReader.numPages): pageObj = pdfReader.getPage(page) print(pageObj.extractText()) pdfFileObj.close()
使用 PyPDF2 打開文件、讀取頁數、逐頁讀取並打印,這是讀取 PDF 文件最基本的操作。
2、寫入 PDF 文件
import PyPDF2 pdfFileObj = open('example.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) pdfWriter = PyPDF2.PdfFileWriter() for page in range(pdfReader.numPages): pdfWriter.addPage(pdfReader.getPage(page)) pdfOutFile = open('output.pdf', 'wb') pdfWriter.write(pdfOutFile) pdfFileObj.close() pdfOutFile.close()
使用 PyPDF2 在 Python 中生成 PDF 文件,這個過程非常簡單。首先,我們打開原有的 PDF 文件,並以只讀模式讀取其中的內容。然後,我們創建一個新的 PDF 文件,並以寫入模式寫入讀取的內容,最後關閉兩個文件即可得到一個新的 PDF 文件。
3、拆分 PDF 文件
import PyPDF2 pdfFileObj = open('example.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) pdfWriter = PyPDF2.PdfFileWriter() for page in range(pdfReader.numPages): pdfWriter.addPage(pdfReader.getPage(page)) if page % 5 == 0: filename = 'split_%s.pdf' % (page // 5) pdfOutFile = open(filename, 'wb') pdfWriter.write(pdfOutFile) pdfWriter = PyPDF2.PdfFileWriter() pdfOutFile.close() if pdfWriter.getNumPages() > 0: filename = 'split_%s.pdf' % ((page // 5) + 1) pdfOutFile = open(filename, 'wb') pdfWriter.write(pdfOutFile) pdfOutFile.close() pdfFileObj.close()
使用 PyPDF2 對 PDF 文件進行拆分,這個過程比較繁瑣。我們可以遍歷讀取的 PDF 文件,每 5 頁拆分為一個新的 PDF 文件。在拆分時,我們需要注意最後一頁不足 5 頁不需要拆分,而拆分後的文件名需要按照序列遞增命名。
4、合併 PDF 文件
import PyPDF2 pdfOutFile = open('merged.pdf', 'wb') pdfWriter = PyPDF2.PdfFileWriter() for filename in ['example1.pdf', 'example2.pdf', 'example3.pdf']: pdfFileObj = open(filename, 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) for page in range(pdfReader.numPages): pdfWriter.addPage(pdfReader.getPage(page)) pdfFileObj.close() pdfWriter.write(pdfOutFile) pdfOutFile.close()
使用 PyPDF2 合併多個 PDF 文件,這個過程比較簡單。我們只需要遍歷需要合併的 PDF 文件,將其每一頁逐個加入到新的 PDF 文件中即可。需要注意的是,生成的新文件必須以寫入模式打開。
5、加密 PDF 文件
import PyPDF2 pdfWriter = PyPDF2.PdfFileWriter() pdfWriter.encrypt("password") pdfFileObj = open('example.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) for page in range(pdfReader.numPages): pdfWriter.addPage(pdfReader.getPage(page)) pdfOutFile = open('encrypted.pdf', 'wb') pdfWriter.write(pdfOutFile) pdfFileObj.close() pdfOutFile.close()
使用 PyPDF2 對 PDF 文件進行加密,這個過程非常簡單。我們只需要在創建 PDFWriter 對象時,調用 encrypt 方法並傳入密碼即可。需要注意的是,加密後的文件只能在輸入正確的密碼後才能打開。
二、PDF 文件的高級操作
1、PDF 文件的裁剪、旋轉和縮放
import PyPDF2 pdfFileObj = open('example.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) pdfWriter = PyPDF2.PdfFileWriter() for page in range(pdfReader.numPages): pageObj = pdfReader.getPage(page) pageObj.mediaBox.lowerLeft = (pageObj.mediaBox.getLowerLeft_x() + 200, pageObj.mediaBox.getLowerLeft_y() + 200) pageObj.mediaBox.upperRight = (pageObj.mediaBox.getUpperRight_x() - 200, pageObj.mediaBox.getUpperRight_y() - 200) pageObj.rotateClockwise(90) pageObj.scale(0.8, 0.8) pdfWriter.addPage(pageObj) pdfOutFile = open('output.pdf', 'wb') pdfWriter.write(pdfOutFile) pdfFileObj.close() pdfOutFile.close()
使用 PyPDF2 對 PDF 文件進行裁剪、旋轉和縮放,這些高級操作需要對 PDF 文件的頁面對象進行比較深入的處理。比如,我們可以通過獲取頁面的 mediaBox 屬性來對其進行裁剪,並通過 rotateClockwise 和 scale 方法對其進行旋轉和縮放。
2、PDF 文件的文本處理和樣式設置
import io from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from PyPDF2 import PdfFileReader, PdfFileWriter from reportlab.lib import colors from reportlab.lib.units import inch buffer = io.BytesIO() pdf = canvas.Canvas(buffer, pagesize=letter) pdf.setFont('Helvetica-Bold', 14) pdf.setFillColor(colors.red) pdf.drawString(1 * inch, 10.5 * inch, "Hello World") pdf.showPage() pdf.save() buffer.seek(0) new_pdf = PdfFileReader(buffer) existing_pdf = PdfFileReader(open("example.pdf", "rb")) output = PdfFileWriter() for page in range(existing_pdf.getNumPages()): input_page = existing_pdf.getPage(page) watermark = new_pdf.getPage(0) input_page.mergePage(watermark) output.addPage(input_page) outputStream = open("output.pdf", "wb") output.write(outputStream) outputStream.close() buffer.close()
使用 ReportLab 先生成一個 PDF,並將其作為水印加入到原有 PDF 中,這個過程比較繁瑣。我們可以先使用 ReportLab 生成指定文本、字體、顏色和位置的 PDF(這部分比較難控制)。然後,使用 PyPDF2 進行 PDF 文件的合併,將新生成的 PDF 文件作為水印加入到原有 PDF 文件中。
3、PDF 文件的表單操作
import io from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from PyPDF2 import PdfFileReader, PdfFileWriter from reportlab.lib import colors from reportlab.lib.units import inch buffer = io.BytesIO() pdf = canvas.Canvas(buffer, pagesize=letter) pdf.setFont('Helvetica', 10) pdf.drawCentredString(300, 77, "姓名:") pdf.drawCentredString(450, 77, "李四") pdf.line(80, 65, 500, 65) pdf.showPage() pdf.save() buffer.seek(0) new_pdf = PdfFileReader(buffer) existing_pdf = PdfFileReader(open("example.pdf", "rb")) output = PdfFileWriter() for page in range(existing_pdf.getNumPages()): input_page = existing_pdf.getPage(page) input_page.mergePage(new_pdf.getPage(0)) output.addPage(input_page) outputStream = open("output.pdf", "wb") output.write(outputStream) outputStream.close() buffer.close()
使用 ReportLab 生成表單,這個過程比較繁瑣。我們可以先計算好表單中各個字段的位置,然後使用 drawCentredString、line 等方法將這些字段畫出來,並設置好屬性(字體、顏色、位置等)。最後,使用 PyPDF2 進行 PDF 文件的合併,將新生成的 PDF 文件作為表單加入到原有 PDF 文件中。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/183927.html