[Python][Coding][辦公室小工具] Combine multiple PDF files to one - Slash Engineer 要多斜有多斜

Breaking

Slash Engineer 要多斜有多斜

程式設計的學習過程 (環境設置、開發環境、程式設計、語法練習、資料結構等等...) 99'暑假:六月初開始. 社會新鮮人:十一月初開始.

2022年6月8日 星期三

[Python][Coding][辦公室小工具] Combine multiple PDF files to one

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 路徑。』
Windows這種問題真的摀告廯的...之前在寫關機bat也遇過=_____=

原因:
由於啟動執行檔的位置,是超連結路徑導致
Google一下UNC就能知道其原因。

解法:(我採用1,因為沒權限改公司laptop雞馬)
Sol.1:    把執行檔搬到C:\或D:\底下執行就不會再出現了。
Sol.2:    去更改UNC相關的機碼值

沒有留言:

張貼留言

問題沒有大小或好壞