如何在 Python 中填寫 PDF 表單欄位

This article was translated from English: Does it need improvement?
Translated
View the article in English

使用 IronPDF 在 Python 中透過程式碼填寫 PDF 表單:僅需幾行程式碼,即可載入現有 PDF、根據欄位名稱定位各欄位、填入數值,並儲存結果。

快速入門:填寫 PDF 表單欄位

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-fill-pdf-form/quickstart.py
1. Install IronPDF: `pip install ironpdf`
2. Load your PDF: `form_document = PdfDocument.FromFile("form.pdf")`
3. Find form field: `field = form_document.Form.FindFormField("fieldname")`
4. Set field value: `field.Value = "Your Value"`
5. Save filled PDF: `form_document.SaveAs("filled_form.pdf")`
// 此程式碼片段無法顯示!
1. Install IronPDF: `pip install ironpdf`
2. Load your PDF: `form_document = PdfDocument.FromFile("form.pdf")`
3. Find form field: `field = form_document.Form.FindFormField("fieldname")`
4. Set field value: `field.Value = "Your Value"`
5. Save filled PDF: `form_document.SaveAs("filled_form.pdf")`
PYTHON

透過網頁使用者介面收集資料,進而產生已填入資料的 PDF 檔案以供歸檔或後續處理,是常見的文件自動化模式。 與其手動將資料填入 PDF 表單,Python 腳本能立即處理此任務:讀取欄位名稱、填入數值,並產出可供儲存或發送的完整文件。

IronPDF 讓此工作流程變得直觀:一個 API 即可從 HTML 建立表單,一個方法即可透過名稱定位欄位,一個屬性即可設定其值。 實際環境中的 PDF 表單不僅包含文字輸入欄位。 複選框、單選按鈕和下拉式選單皆透過相同的 FindFormFieldValue 方法進行支援。 本指南的其餘部分將逐步說明關鍵情境:從 HTML 標記生成表單、填寫現有文件中的欄位、讀取所有欄位類型,以及從資料來源執行批次填入。

如何使用 Python 的 HTML 來建立並填寫 PDF 表單?

IronPDF 能將 HTML <input> 元素直接轉換為可編輯的 PDF 欄位,讓您能從網頁風格的表單定義,直接生成可填寫的 PDF 文件。 您可以使用熟悉的 HTML 和 CSS 設計表單,隨後立即填入資料,無需任何中間的手動步驟。

以下範例將 HTML 表單渲染為 PDF,接著填入 firstnamelastname 欄位,最後儲存結果。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-fill-pdf-form/fill-form-from-html.py
from ironpdf import *

# Define HTML content for a simple form
form_html = """
<html>
<body>
<h2>Editable PDF Form</h2>
<form>
First name: <br> <input type='text' name='firstname' value=''> <br>
Last name: <br> <input type='text' name='lastname' value=''>
</form>
</body>
</html>
"""

# Instantiate a PDF renderer
renderer = ChromePdfRenderer()

# Enable HTML form-to-PDF-field conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = True

# Render the HTML content to a PDF file
renderer.RenderHtmlAsPdf(form_html).SaveAs("BasicForm.pdf")

# Load the created PDF document
form_document = PdfDocument.FromFile("BasicForm.pdf")

# Access the "firstname" field and set its value
first_name_field = form_document.Form.FindFormField("firstname")
first_name_field.Value = "Minnie"
print("FirstNameField value: {}".format(first_name_field.Value))

# Access the "lastname" field and set its value
last_name_field = form_document.Form.FindFormField("lastname")
last_name_field.Value = "Mouse"
print("LastNameField value: {}".format(last_name_field.Value))

# Save the filled form
form_document.SaveAs("FilledForm.pdf")
// 此程式碼片段無法顯示!
from ironpdf import *

# Define HTML content for a simple form
form_html = """
<html>
<body>
<h2>Editable PDF Form</h2>
<form>
First name: <br> <input type='text' name='firstname' value=''> <br>
Last name: <br> <input type='text' name='lastname' value=''>
</form>
</body>
</html>
"""

# Instantiate a PDF renderer
renderer = ChromePdfRenderer()

# Enable HTML form-to-PDF-field conversion
renderer.RenderingOptions.CreatePdfFormsFromHtml = True

# Render the HTML content to a PDF file
renderer.RenderHtmlAsPdf(form_html).SaveAs("BasicForm.pdf")

# Load the created PDF document
form_document = PdfDocument.FromFile("BasicForm.pdf")

# Access the "firstname" field and set its value
first_name_field = form_document.Form.FindFormField("firstname")
first_name_field.Value = "Minnie"
print("FirstNameField value: {}".format(first_name_field.Value))

# Access the "lastname" field and set its value
last_name_field = form_document.Form.FindFormField("lastname")
last_name_field.Value = "Mouse"
print("LastNameField value: {}".format(last_name_field.Value))

# Save the filled form
form_document.SaveAs("FilledForm.pdf")
PYTHON

CreatePdfFormsFromHtml 屬性設定為 True,會指示渲染器將 HTML 中的每個 <input> 元素轉換為對應的互動式 PDF 欄位。 若未設定此標記,文字輸入欄位將以靜態視覺元素呈現,無法透過程式化方式填入內容。

渲染完成後,PdfDocument.FromFile 會將儲存的檔案重新載入記憶體中。 FindFormField 方法接受字段的 name 屬性作為字串,並返回一個 FormField 物件。 將值賦予 Value 會將資料寫入該欄位。 SaveAs 呼叫會將修改後的文件寫入磁碟。

提示設計用於 PDF 轉換的 HTML 表單時,請確保 name 欄位的屬性簡短且符合 URL 安全規範。 欄位名稱中的空格和特殊字元雖可正常運作,但可能會增加後續 FindFormField 查詢的複雜度。

未填寫前的空白表單長什麼樣子?

IronPDF 渲染的 PDF 顯示一個空白表單,其中

生成的 PDF 會保留 HTML 表單的視覺版面配置。 每個文字輸入欄位皆呈現為可點擊且可編輯的欄位。 當表單在 PDF 閱讀器中開啟時,使用者仍可手動在欄位中輸入內容,或如上所述透過 API 填入欄位。

填寫完畢後,表單會呈現什麼樣貌?

經程式化填寫後,IronPDF 填寫的 PDF 表單中,名字欄位顯示

已填寫的文件顯示了寫入各欄位的值。 表單結構與欄位互動功能完全保留:PDF 檔案可直接儲存以供歸檔,或進行扁平化處理以鎖定數值以便分發。

如何在現有 PDF 文件中填寫欄位?

許多實際工作流程會涉及使用 Adobe Acrobat、WORD 或其他工具所建立的 PDF 表單。 IronPDF 可載入任何包含 AcroForm 表單欄位的 PDF 檔案,並使用與從 HTML 建立表單時相同的 FindFormFieldValue API 來填入資料。 AcroForm 是 PDF 規格中定義的標準互動式表單格式,並獲得所有主要 PDF 閱讀器的支援。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-fill-pdf-form/fill-existing-form.py
from ironpdf import *

# Load a pre-existing PDF with form fields
form_document = PdfDocument.FromFile("existing_form.pdf")

# Enumerate available field names (helpful when exploring an unfamiliar form)
for field in form_document.Form.Fields:
    print("Field name:", field.Name, "| Current value:", field.Value)

# Fill a specific field by name
applicant_name_field = form_document.Form.FindFormField("applicant_name")
applicant_name_field.Value = "Jane Smith"

# Fill a second field
date_field = form_document.Form.FindFormField("application_date")
date_field.Value = "2026-05-03"

# Save the filled document
form_document.SaveAs("submitted_application.pdf")
// 此程式碼片段無法顯示!
from ironpdf import *

# Load a pre-existing PDF with form fields
form_document = PdfDocument.FromFile("existing_form.pdf")

# Enumerate available field names (helpful when exploring an unfamiliar form)
for field in form_document.Form.Fields:
    print("Field name:", field.Name, "| Current value:", field.Value)

# Fill a specific field by name
applicant_name_field = form_document.Form.FindFormField("applicant_name")
applicant_name_field.Value = "Jane Smith"

# Fill a second field
date_field = form_document.Form.FindFormField("application_date")
date_field.Value = "2026-05-03"

# Save the filled document
form_document.SaveAs("submitted_application.pdf")
PYTHON

當處理表單欄位名稱未經文件說明時,在填入資料前先迭代 form_document.Form.Fields 會很有幫助。 此迴圈會PRINT每個欄位名稱及其當前值,在寫入任何值之前,便能完整呈現表單所期望的資料結構。

請注意IronPDF 支援 AcroForm 欄位,這是標準的互動式表單格式。 掃描的 PDF 檔及僅含圖像的文件不包含欄位資料; (可先使用 IronOCR 從這些文件中擷取文字。)}]

如何處理核取方塊及其他欄位類型?

文字欄位是最常見的表單元素,但實際的表單還包含核取方塊、單選按鈕以及下拉式選單。 IronPDF 透過相同的 Form.Fields 集合提供所有這些功能。 Value 屬性會接受各類型對應的適當字串。

下表列出三種最常見的非文字欄位類型的有效值:

IronPDF PDF 表單欄位值規範(非文字輸入類型)
欄位類型HTML 輸入類型需設定的數值備註
核取方塊"true""false"不區分大小寫;請使用字串,而非布林值
單選鈕選項的 value 屬性名稱相同,但各選項的數值不同
下拉式選單(組合方塊)所需選項的顯示文字必須與現有選項完全一致
:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-fill-pdf-form/fill-field-types.py
from ironpdf import *

# Load a form with multiple field types
form_document = PdfDocument.FromFile("application_form.pdf")

# Fill a text field
form_document.Form.FindFormField("full_name").Value = "Alex Rivera"

# Check a checkbox (use string "true")
form_document.Form.FindFormField("agree_terms").Value = "true"

# Select a radio button option by its value attribute
form_document.Form.FindFormField("employment_status").Value = "full_time"

# Select a dropdown option by display text
form_document.Form.FindFormField("country").Value = "United States"

form_document.SaveAs("completed_application.pdf")
// 此程式碼片段無法顯示!
from ironpdf import *

# Load a form with multiple field types
form_document = PdfDocument.FromFile("application_form.pdf")

# Fill a text field
form_document.Form.FindFormField("full_name").Value = "Alex Rivera"

# Check a checkbox (use string "true")
form_document.Form.FindFormField("agree_terms").Value = "true"

# Select a radio button option by its value attribute
form_document.Form.FindFormField("employment_status").Value = "full_time"

# Select a dropdown option by display text
form_document.Form.FindFormField("country").Value = "United States"

form_document.SaveAs("completed_application.pdf")
PYTHON

在迭代 form_document.Form.Fields 時,每個 FormField 物件會公開一個 Name 屬性與一個 Value 屬性。 對於單選按鈕群組和下拉式選單,在輸入前先列印現有的 Value,即可顯示當前選取項目,並確認該欄位的預期格式。

注意事項FindFormField 返回 None,表示該欄位名稱在文件中不存在。 請透過 form_document.Form.Fields PRINT 所有名稱,以驗證拼寫並確認該欄位是否存在。 欄位名稱區分大小寫。)}]

如何從資料來源批量填寫表單?

從試算表或資料庫查詢中,針對每筆記錄生成一份已填妥的 PDF 文件,是團隊採用程式化表單填寫功能最常見的原因之一。 IronPDF 透過將每次填入操作視為無狀態來處理此問題:載入範本、填入欄位、以唯一名稱儲存,並重複此流程。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-fill-pdf-form/bulk-fill-forms.py
from ironpdf import *

# Sample data records (replace with database or CSV source)
applicants = [
    {"name": "Alice Johnson", "id": "A001", "date": "2026-05-03"},
    {"name": "Bob Williams", "id": "B002", "date": "2026-05-03"},
    {"name": "Carol Davis",  "id": "C003", "date": "2026-05-03"},
]

for applicant in applicants:
    # Load template from disk on each iteration to avoid cross-contamination
    form_document = PdfDocument.FromFile("application_template.pdf")

    # Fill each field from the data record
    form_document.Form.FindFormField("applicant_name").Value = applicant["name"]
    form_document.Form.FindFormField("applicant_id").Value   = applicant["id"]
    form_document.Form.FindFormField("submission_date").Value = applicant["date"]

    # Save each filled form with a unique filename
    output_path = f"output/application_{applicant['id']}.pdf"
    form_document.SaveAs(output_path)
    print(f"Saved: {output_path}")
// 此程式碼片段無法顯示!
from ironpdf import *

# Sample data records (replace with database or CSV source)
applicants = [
    {"name": "Alice Johnson", "id": "A001", "date": "2026-05-03"},
    {"name": "Bob Williams", "id": "B002", "date": "2026-05-03"},
    {"name": "Carol Davis",  "id": "C003", "date": "2026-05-03"},
]

for applicant in applicants:
    # Load template from disk on each iteration to avoid cross-contamination
    form_document = PdfDocument.FromFile("application_template.pdf")

    # Fill each field from the data record
    form_document.Form.FindFormField("applicant_name").Value = applicant["name"]
    form_document.Form.FindFormField("applicant_id").Value   = applicant["id"]
    form_document.Form.FindFormField("submission_date").Value = applicant["date"]

    # Save each filled form with a unique filename
    output_path = f"output/application_{applicant['id']}.pdf"
    form_document.SaveAs(output_path)
    print(f"Saved: {output_path}")
PYTHON

在迴圈內部載入範本,而非在迴圈開始前載入一次,可防止欄位值在多次迭代中累積。 每次呼叫 PdfDocument.FromFile 都會產生一個新的範本副本,因此填寫一個記錄不會影響下一個記錄。

重要事項若需執行大量批次處理,建議先載入一次包含 PdfDocument.FromFile 的範本,並在 API 支援的情況下使用複製機制。 在部署前,請根據您的流量需求對兩種方法進行效能測試。)}]

IronPDF 不會對單次執行腳本所能產生的文件數量施加人為限制。 吞吐量取決於可用記憶體及輸出目標的 I/O 速度。 對於非常龐大的批次,先寫入本地 SSD 再傳輸至網路儲存裝置,比直接寫入網路共用資料夾更快。

如何將已填寫的 PDF 表單轉為純文字檔?

"扁平化"會將互動式表單欄位轉換為靜態頁面內容,並將當前值固定下來。 扁平化 PDF 是用於歸檔、列印,或傳送給不應變更欄位值的收件者的最佳選擇。

IronPDF 提供了一種"扁平化表單欄位"的方法,可對任何已載入的 PdfDocument 進行操作。 填寫完欄位後呼叫此函式,然後儲存結果。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-fill-pdf-form/flatten-form.py
from ironpdf import *

# Load and fill a form
form_document = PdfDocument.FromFile("application_template.pdf")
form_document.Form.FindFormField("full_name").Value = "Jordan Lee"
form_document.Form.FindFormField("application_date").Value = "2026-05-03"

# Flatten all form fields to lock values as static content
form_document.Form.Flatten()

# Save the flattened, non-editable PDF
form_document.SaveAs("archived_application.pdf")
// 此程式碼片段無法顯示!
from ironpdf import *

# Load and fill a form
form_document = PdfDocument.FromFile("application_template.pdf")
form_document.Form.FindFormField("full_name").Value = "Jordan Lee"
form_document.Form.FindFormField("application_date").Value = "2026-05-03"

# Flatten all form fields to lock values as static content
form_document.Form.Flatten()

# Save the flattened, non-editable PDF
form_document.SaveAs("archived_application.pdf")
PYTHON

Flatten() 之後,文件中不再包含互動式欄位物件。 接收該檔案的下游系統所看到的,是普通文字內容,而非表單控件。 這對於符合 PDF/A 歸檔規範,以及防止在多步驟審核流程中發生非預期的編輯,至關重要。

提示若文件將用於歸檔,請在儲存前立即進行扁平化處理。 若該文件將先經審閱與修正,請在最終儲存前保持欄位可編輯狀態。

如何在 Python 中安裝 IronPDF?

IronPDF 可在 PyPI 上取得。 使用 pip 安裝:

 pip install ironpdf

安裝完成後,請在每個腳本的開頭使用 from ironpdf import * 導入該函式庫。 提供免費試用授權供評估使用。 在執行任何 PDF/A 操作之前,生產環境部署需透過 License.LicenseKey 屬性設定商業授權金鑰。

請注意IronPDF 需要 Python 3.6 或更高版本。 此套件內含用於 HTML 轉 PDF 渲染的無頭 Chromium 引擎,因此首次導入時,引擎初始化可能需要片刻時間。)}]

Python 中的 PDF 表單自動化下一步該怎麼做?

本指南涵蓋了從 HTML 建立 PDF 表單、填寫現有文件中的欄位、處理核取方塊與下拉式選單欄位、根據資料記錄批次產生已填寫的表單,以及將已填寫的 PDF 文件扁平化以便歸檔等內容。 每種技術皆採用相同的核心 API:FindFormField 用於根據名稱定位欄位,Value 用於賦值,以及 SaveAs 用於寫入結果。

若要探索 IronPDF for Python 的相關功能:

立即開始免費試用,在您的 Python 專案中測試表單填寫功能。 當您準備部署時,請查看個人開發者與Enterprise套件的授權選項

常見問題

在 Python 中透過程式碼填寫 PDF 表單的基本步驟有哪些?

使用 `pip install IronPDF` 安裝 IronPDF,透過 `PdfDocument.FromFile()` 載入 PDF 檔案,使用 `form_document.Form.FindFormField()` 查找目標欄位,將值賦予 `field.Value`,最後透過 `SaveAs()` 儲存檔案。

如何存取並修改 PDF 文件中的特定表單欄位?

請在已載入的 PdfDocument 物件的 Form 屬性上使用 FindFormField 方法,並將欄位名稱作為字串傳入。該方法會傳回一個 FormField 物件,您可以讀取或設定其 Value 屬性。

如何使用 IronPDF 填寫核取方塊和下拉式選單?

對於核取方塊,請將 Value 設定為字串 "true""false"。對於單選按鈕,請將 Value 設定為所需選項的 value 屬性。對於下拉式選單,請將 Value 設定為您希望選中的選項之精確顯示文字。

我可以自動批量填寫多個 PDF 文件中的表單嗎?

是的。請在迴圈中載入範本,並在每次迭代時使用 PdfDocument.FromFile() 取得新副本,從資料來源填入欄位,最後透過 SaveAs() 將每個結果以唯一檔名儲存。

何謂表單扁平化?何時該使用它?

「扁平化」功能會將互動式表單欄位轉換為靜態頁面內容,並鎖定其值。當文件需進行歸檔、列印,或分發給不應編輯欄位值的收件者時,請在儲存前呼叫 form_document.Form.Flatten()

如果 FindFormField 無法找到欄位,會發生什麼情況?

若不存在名稱與參數相符的欄位,FindFormField 會傳回 None。請遍歷 form_document.Form.Fields 以列印所有可用欄位名稱,並確認拼寫正確。欄位名稱區分大小寫。

IronPDF 支援哪些類型的 PDF 表單?

IronPDF 支援 AcroForm 表單欄位,這是 Adobe Acrobat 及多數 PDF 製作工具所採用的標準互動式表單格式。掃描的 PDF 及純圖像文件不包含 AcroForm 表單欄位,在進行文字擷取前需先進行 OCR 處理。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎?
執行範例 觀看您的 HTML 轉為 PDF。