VBA / Excel VBA將檔案另存成PDF再使用自訂python程式加密PDF 4

在前一篇 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")