2.4 KiB
2.4 KiB
租屋契約 PDF 產生器
這是一個 Node.js 網頁工具,用指定的 Word .doc 範本產生租屋契約 PDF。網頁會帶入:
{{每月租金}}:預設8000{{繳款日期}}:預設18{{保證金}}:預設16000
產生流程:
- 從
templates/複製指定的.doc範本到暫存資料夾。 - 替換暫存
.doc裡的三個佔位符。 - 呼叫 LibreOffice headless 將暫存
.doc轉成 PDF。 - 將 PDF 回傳給網頁下載;手機瀏覽器支援時可直接分享。
- 刪除暫存
.doc與轉檔過程產生的檔案。
專案結構
.
├─ public/ # 前端網頁
├─ src/contractService.js # 複製範本、替換文字、轉 PDF
├─ templates/ # 放 Word .doc 範本
├─ server.js # Express API
├─ Dockerfile
└─ README.MD
範本準備
把 Word 範本放到 templates/ 資料夾,範本內請保留以下文字:
{{每月租金}}
{{繳款日期}}
{{保證金}}
目前程式針對舊版 .doc 以固定長度替換,填入的值不能比佔位符字數更長。金額與日期這類短數字可以正常使用。
本機執行
本機需要先安裝:
- Node.js 20 或更新版本
- LibreOffice,且
soffice指令可在命令列執行
安裝套件:
npm install
啟動:
npm start
開啟:
http://localhost:3000
Docker 執行
建立 image:
docker build -t rental-contract-pdf .
啟動 container:
docker run --rm -p 3000:3000 rental-contract-pdf
若要把本機 templates/ 掛進 container:
docker run --rm -p 3000:3000 -v "${PWD}\templates:/app/templates" rental-contract-pdf
開啟:
http://localhost:3000
手機下載或分享
手機連到這個網站後,產生 PDF 時會優先使用瀏覽器的檔案分享功能。若瀏覽器或連線環境不支援檔案分享,網頁會保留下載 PDF 按鈕。
注意:多數手機瀏覽器的檔案分享功能需要 HTTPS 或 localhost。若用區網 IP 開啟,例如 http://192.168.x.x:3000,可能只能下載,不能直接分享。
API
產生 PDF:
POST /api/contracts/pdf
Content-Type: application/json
Body:
{
"template": "租屋契約-內容_逢甲 A.doc",
"monthlyRent": "8000",
"paymentDay": "18",
"deposit": "16000"
}
成功時會回傳 application/pdf。