Python 提供了不同的功能,人們可以執行這些功能來操作 PDF 文件,在前面的兩個教程中,我們已經討論了很多關於使用 Python 處理 PDF 文件的事情。在本教程中,我們將了解如何使用 Python 編程語言在 PDF 文件中創建互動式表單。
但是在開始之前,我們還將討論一個 Python 工具包,它為我們創建一個名為 ReportLab 工具包的互動式表單提供了可訪問性。
理解 Python 中的報告實驗室工具包
Python ReportLab 工具包允許程序員創建互動式的可填充表單。PDF 標準通常由一組豐富的交互元素組成。報告實驗室工具包不支持所有這些元素;然而,它確實涵蓋了其中的大部分。在下一節中,我們將查看以下小部件:
- 檢驗盒
- 收音機
- 選擇
- 列表框
- Textfield 對象
所有陳述的小部件都是通過在畫布上調用不同的方法來開發的。請注意,每個文檔只能有一個表單。讓我們了解一下報告實驗室工具包中的這些小部件。
了解複選框小部件
複選框小部件正是它聽起來的樣子。這是一個小框,我們可以用它來檢查表單中顯示的實體。 Reportlab 支持不同風格的複選框,所以當複選框被選中時,它可以根據我們設置的風格看起來與眾不同。
現在,讓我們來理解一個簡單的例子,它說明了這些參數是如何表現的:
示例:
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfform
from reportlab.lib.colors import magenta, pink, blue, green
def createSimpleCheckboxes():
my_Canvas = canvas.Canvas('checkboxes.pdf')
my_Canvas.setFont("Courier", 24)
my_Canvas.drawCentredString(300, 700, 'Programming Languages')
my_Canvas.setFont("Courier", 16)
form = my_Canvas.acroForm
my_Canvas.drawString(10, 650, 'Python:')
form.checkbox(
name = 'cb1',
tooltip = 'Field cb1',
x = 110,
y = 645,
buttonStyle = 'check',
borderColor = magenta,
fillColor = pink,
textColor = blue,
forceBorder = True
)
my_Canvas.drawString(10, 600, 'Java:')
form.checkbox(
name = 'cb2',
tooltip = 'Field cb2',
x = 110,
y = 595,
buttonStyle = 'cross',
borderWidth = 2,
forceBorder = True
)
my_Canvas.drawString(10, 550, 'C++:')
form.checkbox(
name = 'cb3',
tooltip = 'Field cb3',
x = 110,
y = 545,
buttonStyle = 'star',
borderWidth = 1,
forceBorder = True
)
my_Canvas.drawString(10, 500, 'C:')
form.checkbox(
name = 'cb4',
tooltip = 'Field cb4',
x = 110,
y = 495,
buttonStyle = 'circle',
borderWidth = 3,
forceBorder = True
)
my_Canvas.drawString(10, 450, 'JavaScript:')
form.checkbox(
name = 'cb5',
tooltip = 'Field cb5',
x = 110,
y = 445,
buttonStyle = 'diamond',
borderWidth = None,
checked = True,
forceBorder = True
)
my_Canvas.save()
if __name__ == '__main__':
createSimpleCheckboxes()
輸出:
說明:
從上面的代碼片段中我們可以看到,我們已經從 ReportLab 庫的不同模塊中導入了不同的函數。然後,我們設置了名稱和工具提示,以便與小部件的名稱相匹配。我們已經確定了它的位置和其他一些事情。我們可以隨意調整複選框邊框的寬度或關閉邊框。但是,如果我們將其關閉,複選框可能會變得不可見,因此我們可能希望通過填充顏色來設置其背景顏色。我們已經為每個複選框設置了按鈕樣式的獨特之處。
了解收音機部件
單選小部件類似於複選框,儘管單選按鈕位於我們一次只能選擇一個單選按鈕的組中。複選框很少被限制為每個組允許一個複選框。報告實驗室工具包沒有提供一種方法來明確地將一組無線電盒組合在一起。工具包只提供了分組的隱式方式。這種說法意味著,如果我們一個接一個地創建一系列廣播,它們將被組合在一起。
現在,讓我們使用如下所示的簡單示例來理解這一點:
示例:
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfform
from reportlab.lib.colors import magenta, pink, blue, green
def createSimpleRadios():
my_canvas = canvas.Canvas('radiosFile.pdf')
my_canvas.setFont("Courier", 22)
my_canvas.drawCentredString(300, 700, 'Radio demo')
my_canvas.setFont("Courier", 16)
form = my_canvas.acroForm
my_canvas.drawString(10, 650, 'Python:')
form.radio(
name = 'radio1',
tooltip = 'Field radio1',
value = 'value1',
selected = False,
x = 110,
y = 645,
buttonStyle = 'check',
borderStyle = 'solid',
shape = 'square',
borderColor = magenta,
fillColor = pink,
textColor = blue,
forceBorder = True
)
form.radio(
name = 'radio1',
tooltip = 'Field radio1',
value = 'value2',
selected = True,
x = 110,
y = 645,
buttonStyle = 'check',
borderStyle = 'solid',
shape = 'square',
borderColor = magenta,
fillColor = pink,
textColor = blue,
forceBorder = True)
my_canvas.drawString(10, 600, 'Java:')
form.radio(
name = 'radio2',
tooltip = 'Field radio2',
value = 'value1',
selected = True,
x = 110,
y = 595,
buttonStyle = 'cross',
borderStyle = 'solid',
shape = 'circle',
borderColor = green,
fillColor = blue,
borderWidth = 2,
textColor = pink,
forceBorder = True
)
form.radio(
name = 'radio2',
tooltip = 'Field radio2',
value = 'value2',
selected = False,
x = 110,
y = 595,
buttonStyle = 'cross',
borderStyle = 'solid',
shape = 'circle',
borderColor = green,
fillColor=blue,
borderWidth=2,
textColor = pink,
forceBorder=True
)
my_canvas.drawString(10, 550, 'C++:')
form.radio(
name = 'radio3',
tooltip = 'Field radio3',
value = 'value1',
selected = False,
x = 110,
y = 545,
buttonStyle = 'star',
borderStyle = 'bevelled',
shape = 'square',
borderColor = blue,
fillColor = green,
borderWidth = 2,
textColor = magenta,
forceBorder = False
)
form.radio(
name = 'radio3',
tooltip = 'Field radio3',
value = 'value2',
selected = True,
x = 110,
y = 545,
buttonStyle = 'star',
borderStyle = 'bevelled',
shape = 'circle',
borderColor = blue,
fillColor = green,
borderWidth = 2,
textColor = magenta,
forceBorder = True
)
my_canvas.save()
if __name__ == '__main__':
createSimpleRadios()
輸出:
說明:
在上面的代碼片段中,我們已經從 ReportLab 工具包的不同模塊中導入了所需的函數。然後我們定義了一個函數,並創建了一個新的 PDF 文件。然後,我們為 PDF 文件定義了不同的單選按鈕,並保存了該文件。最後,我們調用了函數。
一旦我們執行了上面的代碼片段,我們可以觀察到程序只返回了三個無線電。這是因為我們需要為每個單選按鈕創建兩個名稱相同但值和部分不同的對象。文檔沒有說明背後的原因,但是我們可以假設這樣做是為了支持 ReportLab 工具包跟蹤小部件的「選定」狀態。這也允許我們在選擇或取消選擇收音機時改變其外觀。
理解選擇小部件
選項小部件基本上是一個組合框,當用戶點擊它時會顯示一個下拉列表。這使用戶能夠根據我們設置的欄位標誌從下拉列表中選擇一個或多個選項。如果我們在欄位標誌中插入編輯,那麼用戶可以在選擇部件中編輯元素。
讓我們理解以下示例,演示在 PDF 文檔中使用選擇小部件:
示例:
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfform
from reportlab.lib.colors import magenta, pink, blue, green, red
def createSimpleChoices():
my_canvas = canvas.Canvas('choicesFile.pdf')
my_canvas.setFont("Courier", 24)
my_canvas.drawCentredString(300, 700, 'Sample Choices')
my_canvas.setFont("Courier", 16)
form = my_canvas.acroForm
my_canvas.drawString(10, 650, 'Choose a Letter:')
my_options = [('A', 'Av'), 'B', ('C', 'Cv'), ('D', 'Dv'), 'E',('F', ), ('G', 'Gv')]
form.choice(
name = 'choice1',
tooltip = 'Field choice1',
value = 'A',
x = 165,
y = 645,
width = 72,
height = 20,
borderColor = magenta,
fillColor = pink,
textColor = blue,
forceBorder = True,
options = my_options)
my_canvas.drawString(10, 600, 'Choose a Programming language:')
my_options = [('Python', 'python'), ('Java', 'java'), ('C++', 'C++')]
form.choice(
name = 'choice2',
tooltip = 'Field choice2',
value = 'Python',
options = my_options,
x = 305,
y = 595,
width = 72,
height = 20,
borderStyle = 'solid',
borderWidth = 1,
forceBorder = True
)
my_canvas.save()
if __name__ == '__main__':
createSimpleChoices()
輸出:
說明:
在上面的代碼片段中,我們已經從 ReportLab 工具包的不同模塊中導入了所需的函數。然後我們定義了一個函數,並創建了一個新的 PDF 文件。然後,我們創建了兩個應用了稍微不同風格的選擇小部件,並保存了文件。請記住將 value 參數包含到函數中;否則,程序將返回一個奇怪的錯誤,並沒有說任何與參數丟失相關的內容。最後,我們調用了函數。
理解列表框小部件
列表框小部件與選擇小部件有些相似,只是列表框被認為是一個可滾動的框,而不是組合框。我們可以使用欄位標誌參數,該參數支持用戶從列表框中選擇一個或多個元素。
現在,讓我們考慮以下示例,說明如何使用列表框小部件製作互動式 PDF 表單:
示例:
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfform
from reportlab.lib.colors import magenta, pink, blue, green, red
def createSimpleListboxes():
my_canvas = canvas.Canvas('listboxesFile.pdf')
my_canvas.setFont("Courier", 24)
my_canvas.drawCentredString(300, 700, 'Sample Listboxes')
my_canvas.setFont("Courier", 16)
form = my_canvas.acroForm
my_canvas.drawString(10, 650, 'Choose a letter:')
my_options = [('A','Av'),'B',('C','Cv'),('D','Dv'),'E',('F',),('G','Gv')]
form.listbox(
name = 'listbox1',
value = 'A',
x = 165,
y = 590,
width = 72,
height = 72,
borderColor = magenta,
fillColor = pink,
textColor = blue,
forceBorder = True,
options = my_options,
fieldFlags = 'multiSelect'
)
my_canvas.drawString(10, 500, 'Choose a Programming language:')
my_options = [('Python', 'python'), ('Java', 'java'), ('C++', 'C++')]
form.listbox(
name = 'choice2',
tooltip = 'Field choice2',
value = 'Python',
options = my_options,
x = 165,
y = 440,
width = 72,
height = 72,
borderStyle = 'solid',
borderWidth = 1,
forceBorder = True
)
my_canvas.save()
if __name__ == '__main__':
createSimpleListboxes()
輸出:
說明:
在上面的代碼片段中,我們已經從 ReportLab 工具包的不同模塊中導入了所需的函數。然後我們定義了一個函數,並創建了一個新的 PDF 文件。然後,我們創建了應用了略微不同樣式的列表框小部件,並保存了文件。上面的例子與我們創建 choice 小部件的前一個非常相似。這裡的主要區別是列表框小部件和選擇小部件的外觀;否則,這兩個小部件幾乎是一樣的。
了解文本欄位小部件
文本欄位是一個文本輸入小部件。我們可以在表單中看到這些文本欄位小部件來填充姓名、地址等條目。文本欄位的大多數參數與我們在早期小部件中觀察到的參數相同。
讓我們考慮下面的例子來理解這一點:
示例:
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfform
from reportlab.lib.colors import magenta, pink, blue, green
def createSimpleForm():
my_canvas = canvas.Canvas('PDFform.pdf')
my_canvas.setFont("Courier", 24)
my_canvas.drawCentredString(300, 700, 'Application Form')
my_canvas.setFont("Courier", 16)
form = my_canvas.acroForm
my_canvas.drawString(10, 650, 'First Name:')
form.textfield(
name = 'fname',
tooltip = 'First Name',
x = 110,
y = 635,
borderStyle = 'inset',
borderColor = magenta,
fillColor = pink,
width = 300,
textColor = blue,
forceBorder = True
)
my_canvas.drawString(10, 600, 'Last Name:')
form.textfield(
name = 'lname',
tooltip = 'Last Name',
x = 110,
y = 585,
borderStyle = 'inset',
borderColor = green,
fillColor = magenta,
width = 300,
textColor = blue,
forceBorder = True
)
my_canvas.drawString(10, 550, 'Address:')
form.textfield(
name = 'address',
tooltip = 'Address',
x = 110,
y = 535,
borderStyle = 'inset',
width = 400,
forceBorder = True
)
my_canvas.drawString(10, 500, 'City:')
form.textfield(
name = 'city',
tooltip = 'City',
x = 110,
y = 485,
borderStyle = 'inset',
forceBorder = True
)
my_canvas.drawString(250, 500, 'State:')
form.textfield(
name = 'state',
tooltip = 'State',
x = 350,
y = 485,
borderStyle = 'inset',
forceBorder = True
)
my_canvas.drawString(10, 450, 'Zip Code:')
form.textfield(
name = 'zip_code',
tooltip = 'Zip Code',
x = 110,
y = 435,
borderStyle = 'inset',
forceBorder = True
)
my_canvas.save()
if __name__ == '__main__':
createSimpleForm()
輸出:
說明:
在上面的代碼片段中,我們已經從 ReportLab 工具包的不同模塊中導入了所需的函數。然後我們定義了一個函數,並創建了一個新的 PDF 文件。然後,我們創建了應用了略微不同樣式的文本欄位小部件,並保存了文件。正如我們所觀察到的,我們已經創建了一系列應用了不同設置的文本欄位。此外,我們還更改了幾個欄位的邊框和背景顏色。然後我們包括了一些非常標準的。我們還使用了寬度參數來改變文本欄位的寬度。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/312916.html