2025年8月29日 星期五

[研究]製作可編輯的 .pdf (用 wkhtmltopdf.exe)

[研究]製作可編輯的 .pdf (用 wkhtmltopdf.exe)

2025-08-20

原理

  • AcroForm (Adobe Acrobat Form) 是 Adobe 在 PDF 1.2 規格就引入的「互動式表單」功能。
  • 它不是把文字打在 PDF 上,而是在 PDF 裡嵌入一種「欄位物件 (field object)」,讀者可在支援的 PDF 閱讀器中輸入/選擇資料。

********************************************************************************

注意中文字亂碼問題,此處是統一用 UTF-8,可能有其他解法。

input.html

<!DOCTYPE html>
<html lang="UTF-8">
<head>
  <meta charset="UTF-8">
</head>
<body>
<form>
  <label>姓名:<input type="text" name="name"></label><br>
  <label>Email:<input type="email" name="email"></label><br>
  <label>部門:
    <select name="dept">
      <option>Sales</option><option>IT</option><option>HR</option>
    </select>
  </label><br>
  <label><input type="checkbox" name="agree"> 我同意條款</label>
</form>
</body>
</html>

「記事本」存檔用 UTF-8


執行

D:\wkhtmltopdf>wkhtmltopdf.exe --enable-forms --encoding utf-8 input.html output.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

D:\\wkhtmltopdf>

下圖,開啟 output.pdf 畫面


下圖,關閉 .pdf 時候 會問是否儲存變更。

********************************************************************************

ChatGPT 提供的方法,敝人沒有一一去測試

方式一:用桌面軟體建立(最直覺)

  • Adobe Acrobat Pro

開啟檔案 →「工具」→「準備表單(Prepare Form)」。

讓它自動偵測欄位,或自己放 文字框、核取方塊、下拉選單、日期、數字 等。

欄位屬性可設:必填、格式(電話、Email、數字)、預設值、計算、唯讀。

需要簽名就放「簽名欄位」;要鎖其他內容:檔案 → 內容 → 安全性 只允許填表/簽名。


免費/替代工具

  • LibreOffice Writer:插入→表單控制項(文字框、核取方塊…),完成後「檔案→匯出為 PDF」,勾「建立 PDF 表單」。
  • PDF-XChange Editor / Foxit PDF Editor 等也能新增 AcroForm 欄位。

建議選 AcroForm。另一種叫 XFA 的表單相容性差,很多瀏覽器與行動裝置不支援。


方式二:從 HTML 轉成可填寫 PDF

部分轉檔器支援把 HTML 表單轉為 AcroForm 欄位,例如:

  • wkhtmltopdf(有參數可啟用表單),語法 wkhtmltopdf --enable-forms input.html output.pdf
  • PrinceXML、PDFreactor 等商業排版引擎


方式三:用程式庫

常見庫(都支援 AcroForm):

  • Java:iText 7、Apache PDFBox
  • .NET:iText 7 for .NET、PdfSharp/MigraDoc(含表單基本控件)
  • ********************************************************************************Node/前端:pdf-lib、jsPDF(有 AcroForm 插件)


(完)

相關

沒有留言:

張貼留言