在前一篇 VBA / Excel VBA將檔案另存成PDF再使用自訂python程式加密PDF 3
曾經思考有沒有辦法不用先產生檔案的方式
轉了很多彎,後來看PyPDF2的說明
PdfWriter().write()的參數,可以是個路徑
:param stream: An object to write the file to. The object can support the write method and the tell method, similar to a file object, or be a file path, just like the fileobj, just named it stream to keep existing workflow.
這就代表不需要是實體檔案路徑
所以改寫程式碼如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import os, sys from PyPDF2 import PdfReader from PyPDF2 import PdfWriter def addPw(ar1, ar2): #print(ar1,ar2) pdf_path =ar1 pswd=ar2 #不含副檔名的檔案名稱 fileName = os.path.basename(pdf_path).replace(".pdf", "") #最後輸出的檔案路徑 因為檔案加密之後 不能寫回原本的檔案 newFile = os.path.dirname(pdf_path)+"\\"+ fileName +"_pw.pdf" #讀取原始檔案 in_file = open(pdf_path, "r+b") in_pdf = PdfReader(in_file) #加密檔案 out_pdf = PdfWriter() out_pdf.append_pages_from_reader(in_pdf) out_pdf.encrypt(pswd) #寫出檔案 out_pdf.write(newFile) #關閉open()開啟的檔案 in_file.close() #刪除PdfReader() PdfWriter() del in_pdf, out_pdf #print("檔案加密完成") addPw(sys.argv[1], sys.argv[2]) #測試用 #addPw(r"D:\Google 雲端硬碟\莊生的箱子\網站_程式練習\VBA練習\PDF 轉檔 加密\output\臺北市.pdf","123456") #addPw(r"D:\Google 雲端硬碟\莊生的箱子\網站_程式練習\python練習\創建PDF\output\臺北市.pdf","123456") |