Recently, my colleague need to combine multi PDF file for a single customer of e-invoice.
Most PDF application need to subscribe the modify feature.
So.. Let's go Python!
#!C:\Users\stan.wu\AppData\Roaming\Python\Python310\Scripts
# -*- encoding: utf-8 -*-
'''
@文件 :PDFCombin.py
@說明 :Combine PDF FROM B:\PDF_combine\input TO B:\PDF_combine\output
@時間 :2022/06/08 11:21:18
@作者 :Stan Wu
@版本 :1.0
'''
#! python
#
import PyPDF2
import os # 引用PyPDF2以運用PDF更動, 引用os以實作檔名排序及讀檔與輸出檔案
from datetime import datetime
# 取得資料夾內的所有PDF檔名
pdfFiles = []
# ============建立一個pdf_temp資料夾
fin = 'B:\PDF_combine\input'
fout = 'B:\PDF_combine\output'
def checkFolder(fin, fout):
try:
if not os.path.exists(fin): # 檢查fin
os.makedirs(fin)
if not os.path.exists(fout): # 檢查fout是否存在
os.makedirs(fout) # 沒有fout,建立fout
except OSError as error:
print(error.errmsg())
print('請檢查路徑!')
finally:
print(f'請將欲合併的PDF放置於{fin}.')
print(f'合併的PDF將儲存於{fout}.')
# ================================
checkFolder(fin, fout)
# 將所有檔名列出併排序
for filename in os.listdir(fin):
if filename .endswith('.pdf'):
pdfFiles.append(filename)
if len(pdfFiles) == 0:
print(f'欲合併PDF的路徑中{fin}有{len(pdfFiles)}個PDF檔案。!')
# quit()
os._exit(0)
else:
print(f'欲合併PDF的路徑中{fin}有{len(pdfFiles)}個PDF檔案。!')
pdfFiles.sort()
# 宣告pdf輸出物件
pdfWriter = PyPDF2.PdfFileWriter()
# by檔名依序將檔名之內容讀入串流
for filename in pdfFiles:
filename = fin + '\\' + filename
pdfFileObj = open(filename, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
for pageNum in range(0, pdfReader.numPages):
pageObj = pdfReader.getPage(pageNum)
pdfWriter.addPage(pageObj)
x = datetime.now()
#docDate = x.year + x.month + x.day
docDate = x.strftime("%m%d%Y_%H%M%S")
# 將檔案儲存並輸出成檔案
pdfOutput = open(f'{fout}\PDF_CombinResult{docDate}.pdf', 'wb')
pdfWriter.write(pdfOutput)
pdfOutput.close()
os.system('pause')
怪的是,在user端卻無法正常顯示,整個終端機畫面在執行後會瞬間消失..
測了幾個條件,可能是權限不足/切割虛擬路徑造成之類的...吧
把執行檔放在桌面上檢測,果然出現了在debug mode沒出現的問題。
『'\\Txxx\xxxu\Desktop' 是目前用來啟動 CMD.EXE 的目錄路徑。不支援 UNC 路徑。』
『'\\Txxx\xxxu\Desktop' 是目前用來啟動 CMD.EXE 的目錄路徑。不支援 UNC 路徑。』
Windows這種問題真的摀告廯的...之前在寫關機bat也遇過=_____=
原因:
由於啟動執行檔的位置,是超連結路徑導致
Google一下UNC就能知道其原因。
解法:(我採用1,因為沒權限改公司laptop雞馬)
Sol.1: 把執行檔搬到C:\或D:\底下執行就不會再出現了。
Sol.2: 去更改UNC相關的機碼值
沒有留言:
張貼留言
問題沒有大小或好壞