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

再次修改 VBA / Excel VBA將檔案另存成PDF再使用自訂python程式加密PDF 的程式碼

VBA / Excel VBA將檔案另存成PDF再使用自訂python程式加密PDF 2 修改VBA執行流程

1.使用 WScript.Shell 執行命令列、2.在迴圈增加 “DoEvents” 移交控制權

這次是修改python程式碼

原本的程式碼透過 shutil套件複製檔案2次

1個用來增加密碼

1個是用來寫入增加密碼的PDF

而原因是增加密碼的PDF無法寫回原檔案

後來覺得能否可以不用複製檔案??

目前的作法是用 fitz套件產生一個有一頁空白A4的實體PDF

然後用 PyPDF2套件的 pdfReader讀取原始檔

再用PyPDF2套件的 PdfWriter的append_pages_from_reader附加pdfReader

用encrypt增加密碼

最後再寫入空白A4的實體PDF

流程如下

#2 引入 fitz套件

備註:安裝套件要使用這個名稱「PyMuPDF」

#15-22 產生一個一頁A4空白頁的PDF

之後加密的流程大同小異

修改後的程式碼如下

 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
40
41
42
43
44
45
46
47
48
49
import os, sys
import fitz
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", "")
    #print(fileName)
    
    #產生一個A4空白頁的PDF
    doc = fitz.open()
    #To add a blank page,
    w, h = fitz.paper_size("A4") 
    # -1, insertion point: end of document
    doc.new_page(-1, width = w, height = h)    
    newFile = os.path.dirname(pdf_path)+"\\"+ fileName +"_pw.pdf"
    doc.save(newFile)
    #print(newFile)
    
    #讀取檔案
    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_file = open(newFile, "wb")
    #寫出檔案
    out_pdf.write(out_file)
    
    #關閉open()開啟的檔案
    in_file.close()
    out_file.close()
    #刪除PdfReader() PdfWriter()
    del in_pdf, out_pdf
    #print("檔案加密完成")
    
addPw(sys.argv[1], sys.argv[2])

#測試用
#addPw(r"D:\Google 雲端硬碟\莊生的箱子\網站_程式練習\python練習\創建PDF\output\臺北市.pdf","123456")