JianMiau 35df41270f 新增瑞聯、逢甲新人類範本,整理原始 .doc 檔到 原始檔案/
- templates/ 加入 租屋契約-內容_瑞聯.docx、租屋契約-內容_逢甲新人類.docx
- 原始 .doc 檔(逢甲 A/B/C/D、瑞聯、逢甲新人類)移到 原始檔案/ 保存
- 4 份逢甲範本內容微調
- .gitignore 加入 ~$*(Word lock)、*.stackdump、templates/defaults.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 15:15:21 +08:00
2026-05-15 15:19:56 +08:00

租屋契約 PDF 產生器

這是一個 Node.js 網頁工具,用指定的 Word .docx 範本產生租屋契約 PDF。網頁會帶入:

  • {{每月租金}}:預設 8000
  • {{繳款日期}}:預設 18
  • {{保證金}}:預設 16000

產生流程:

  1. templates/ 複製指定的 .docx 範本到暫存資料夾。
  2. 替換暫存 .docx 裡的三個佔位符。
  3. 呼叫 LibreOffice headless 將暫存 .docx 轉成 PDF。
  4. 將 PDF 回傳給網頁下載;手機瀏覽器支援時可直接分享。
  5. 刪除暫存 .docx 與轉檔過程產生的檔案。

專案結構

.
├─ public/                 # 前端網頁
├─ src/contractService.js  # 複製範本、替換文字、轉 PDF
├─ templates/              # 放 Word .docx 範本
├─ fonts/                  # 自訂字體(隨 Docker image 一起打包)
├─ server.js               # Express API
├─ Dockerfile
└─ README.MD

範本準備

把 Word 範本放到 templates/ 資料夾,範本內請保留以下文字:

{{每月租金}}
{{繳款日期}}
{{保證金}}

支援 .docx 格式。佔位符若被 Word 拆成多個 run,程式會自動合併處理。

自訂字體

.ttf.otf.ttc 字體檔放到 fonts/ 資料夾:

  • 本機執行:轉換時自動載入至 LibreOffice profile。
  • Dockerbuild image 時安裝至系統字體,LibreOffice 直接讀取。

本機執行

本機需要先安裝:

  • Node.js 20 或更新版本
  • LibreOfficeWindows 預設路徑為 C:\Program Files\LibreOffice\program\soffice.exe

安裝套件:

npm install

啟動:

npm start

開啟:

http://localhost:3005

Docker 執行

建立 image

sudo docker build -t rental-contract-pdf .

啟動 container

sudo docker run -d -p 3005:3005 --name rental-contract-pdf rental-contract-pdf

若要把本機 templates/ 掛進 container

sudo docker run -d -p 3005:3005 -v /path/to/templates:/app/templates --name rental-contract-pdf rental-contract-pdf

開啟:

http://localhost:3005

手機下載或分享

手機連到這個網站後,產生 PDF 時會優先使用瀏覽器的檔案分享功能。若瀏覽器或連線環境不支援檔案分享,網頁會保留下載 PDF 按鈕。

注意:多數手機瀏覽器的檔案分享功能需要 HTTPS 或 localhost。若用區網 IP 開啟,例如 http://192.168.x.x:3005,可能只能下載,不能直接分享。

API

產生 PDF

POST /api/contracts/pdf
Content-Type: application/json

Body

{
  "template": "租屋契約-內容_逢甲 A.docx",
  "monthlyRent": "8000",
  "paymentDay": "18",
  "deposit": "16000"
}

成功時會回傳 application/pdf

S
Description
租屋契約 PDF 產生器
https://jianmiau.tk:3001/
Readme 5.2 MiB
Languages
JavaScript 69.6%
HTML 12.7%
CSS 10.3%
Shell 5.6%
Dockerfile 1.8%