再次修改 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") |