Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

파이썬으로 PDF 양식 데이터 추출

권현욱(엑셀러) 2024. 3. 31. 19:34
반응형

PDF는 설문조사, 신청서, 계약서에서 송장에 이르기까지 다양한 정보를 수집하는 데 널리 사용됩니다. 그러나 PDF에서 데이터를 수동으로 추출하는 것은 시간이 많이 걸리고 번거로우며 오류가 발생할 수도 있습니다. 파이썬을 사용하여 PDF에서 데이터를 추출하는 방법에 대해 소개합니다.

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

(이미지: 아이엑셀러 닷컴)

 

※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.


  • 원문: Extract PDF Form Data with Python
  • URL: https://medium.com/@alice.yang_10652/extract-pdf-form-data-with-python-39b23422cc3a

PDF 양식에서 값을 추출하는 파이썬 라이브러리

Python으로 PDF 양식에서 값을 추출하려면 Python용 Spire.PDF 라이브러리를 사용할 수 있습니다. Python용 Spire.PDF는 Python 애플리케이션 내에서 PDF 파일 생성, 읽기, 편집, 변환을 지원하는 기능이 풍부하고 사용자 친화적인 라이브러리입니다.

 

이 라이브러리를 사용하면 텍스트 또는 이미지 추가, 텍스트 또는 이미지 추출, 텍스트 또는 이미지 바꾸기, 디지털 서명 추가, 페이지 추가 또는 삭제, PDF 병합 또는 분할, 북마크 만들기, 텍스트 또는 이미지 워터마크 추가, 채우기 가능한 양식 삽입 등 다양한 PDF 조작 작업을 수행할 수 있습니다. 또한 PDF 파일을 Word, Excel, 이미지, HTML, SVG, XPS, OFD, PCL, PostScript 등 다양한 파일 형식으로 변환할 수 있습니다.

PyPI에서 다음 pip 명령을 사용하여 Python용 Spire.PDF를 설치할 수 있습니다.

pip install Spire.Pdf

 

라이브러리 설치에 대한 자세한 내용은 [여기]를 참고하세요.

 

파이썬으로 여러 PDF 양식에서 데이터 추출하기

설문조사 응답이나 고객 피드백 양식과 같이 작성된 PDF 양식을 많이 받은 경우, 이러한 양식에서 데이터를 추출하면 수집된 정보를 바탕으로 분석하고 보고서를 생성할 수 있습니다.

다음은 Python과 Python용 Spire.PDF를 사용하여 다양한 유형(텍스트 상자, 목록 상자, 콤보 상자/드롭다운 목록, 라디오 버튼 및 체크박스)의 여러 PDF 양식에서 데이터를 추출하는 방법을 보여주는 예제입니다.

from spire.pdf.common import *
from spire.pdf import *

# Create an object of the PdfDocument class
doc = PdfDocument()
# Load a PDF document
doc.LoadFromFile("Forms.pdf")

# Create a list to store the extracted form names and values
content = []

# Get the forms from the document
form = doc.Form
formWidget = PdfFormWidget(form)

# Iterate through all forms
if formWidget.FieldsWidget.Count > 0:
    for i in range(formWidget.FieldsWidget.List.Count):
        field = formWidget.FieldsWidget.get_Item(i)

        # Get the name and value of the textbox form
        if isinstance(field, PdfTextBoxFieldWidget):
            textBoxField = field
            name = textBoxField.Name
            value = textBoxField.Text
            content.append(f"Textbox Name: {name}\n")
            content.append(f"Textbox Value: {value}\r\n")

        # Get the name, items, and selected item of the list box form
        if isinstance(field, PdfListBoxWidgetFieldWidget):
            listBoxField = field
            name = listBoxField.Name
            content.append(f"Listbox Name: {name}\n")
            content.append("Listbox Items: \n")
            items = listBoxField.Values
            for i in range(items.Count):
                item = items.get_Item(i)
                content.append(f"{item.Value}\n")
            selectedValue = listBoxField.SelectedValue
            content.append(f"Listbox Selected Item: {selectedValue}\r\n")

        # Get the name, items, and selected item of the combo box (dropdown list) form
        if isinstance(field, PdfComboBoxWidgetFieldWidget):
            comBoxField = field
            name = comBoxField.Name
            content.append(f"Combobox Name: {name}\n")
            content.append("Combobox Items: \n")
            items = comBoxField.Values
            for i in range(items.Count):
                item = items.get_Item(i)
                content.append(f"{item.Value}\n")
            selectedValue = comBoxField.SelectedValue
            content.append(f"Combobox Selected Item: {selectedValue}\r\n")

        # Get the name and selected item of the radio button form
        if isinstance(field, PdfRadioButtonListFieldWidget):
            radioBtnField = field
            name = radioBtnField.Name
            content.append(f"Radio Button Name: {name}\n")
            selectedValue = radioBtnField.SelectedValue
            content.append(f"Radio Button Selected Item: {selectedValue}\r\n")

        # Get the name and status of the checkbox form
        if isinstance(field, PdfCheckBoxWidgetFieldWidget):
            checkBoxField = field
            name = checkBoxField.Name
            content.append(f"Checkbox Name: {name}\n")
            status = checkBoxField.Checked
            if status:
                content.append("Checkbox Status: Checked \n")
            else:
                content.append("Checkbox Status: Unchecked \r\n")

# Write the content of the list into a text file
with open("GetFormValues.txt", "w", encoding="UTF-8") as file:
    file.writelines(content)

doc.Dispose()

 

여러 가지 양식으로부터 데이터 추출

 

파이썬으로 특정 PDF 양식에서 데이터 추출하기

여러 PDF 양식에서 데이터를 추출하는 것 외에도 이름이나 색인을 통해 특정 양식에 액세스한 다음 해당 양식에서 값을 추출할 수 있습니다.

다음은 Python과 Python용 Spire.PDF를 사용하여 특정 PDF 양식에서 데이터를 추출하는 방법을 보여주는 예제입니다.

from spire.pdf.common import *
from spire.pdf import *

# Create an instance of the PdfDocument class
doc = PdfDocument()

# Load a PDF document
doc.LoadFromFile("Forms.pdf")

# Create a list to store the extracted form name and value
content = []

# Get pdf forms
form = doc.Form
formWidget = PdfFormWidget(form)

# Get a textbox form by its name
field = formWidget.FieldsWidget.get_Item("Name")
# Or get a textbox form by its index
# field = formWidget.FieldsWidget.get_Item(0)
textbox = PdfTextBoxFieldWidget(field.Ptr)

# Get the name and value of the textbox
name = textbox.Name
value = textbox.Text
content.append(f"Textbox Name: {name}\n")
content.append(f"Textbox Value: {value}")

# Save the result to a text file
with open("GetSpecificFormValue.txt", "w", encoding="UTF-8") as file:
    file.writelines(content)

doc.Close()

 

Excel과 VBA의 모든 것 아이엑셀러 닷컴 · 강사들이 숨겨 놓고 보는 엑셀러TV