Скрипт Python для заполнения PDF-формы посимвольным вводом в сетке не работаетPython

Программы на Python
Ответить
Anonymous
 Скрипт Python для заполнения PDF-формы посимвольным вводом в сетке не работает

Сообщение Anonymous »

Я работаю над программой Python для автоматизации заполнения форм PDF с помощью PyMuPDF (fitz). Я создал базовую PDF-форму, в которой заполнителями могут быть:
Изображение

Подчеркивание (__________) для текстовых полей или
Блоки/ячейки сетки для ввода одного символа в блок.
Я успешно вставил текст для полей с подчеркивания, определяя их ограничивающие рамки, но мой код дает сбой при попытке записать символы в отдельные блоки сетки.
Вот что я пробовал до сих пор:

Код: Выделить всё

    # JSON data
form_data = {
"Name": "John",
"Surname": "Carter",
"ID": "238094238094",
"Contact": "08348392983",
"email": "johan@jele.com",
"Address": "123 Street, City",
"City": "Pilgrims",
}
Я определил ячейки сетки (прямоугольники) с помощью page.get_drawings() и проверил их близость к метке (например, «Фамилия:»).
Я отсортировал ячейки слева - вправо по их координатам X.
Я попробовал поместить каждый символ текста (например, «Джеле») в ячейку сетки, но это не сработало должным образом.
Я могу выделить сетка ячейки (например, раскрашивая их границы), но размещение текста выравнивается неправильно или вообще неверно.
[img]https:/ /i.sstatic.net/oJq71SpA.png[/img]
Вот код, который я написал на данный момент:

Код: Выделить всё

import fitz  # PyMuPDF

# File paths
input_pdf_path = "Fill_form1.pdf"
output_pdf_path = "Filled_form.pdf"

# Example data
form_data = {"Surname": "Jele"}

# Open the PDF
doc = fitz.open(input_pdf_path)

# Function to detect grid cells
def detect_grid_cells(page, label):
grid_cells = []
text_instances = page.search_for(f"{label}:")

for inst in text_instances:
x_start, y_start, x_end, y_end = inst
drawings = page.get_drawings()
for drawing in drawings:
rect = drawing["rect"]
if rect.y0 > y_start and abs(rect.x0 - x_end) < 200:  # Adjust proximity as needed
grid_cells.append((rect.x0, rect.y0, rect.x1, rect.y1))

grid_cells.sort(key=lambda box: box[0])  # Sort left-to-right
return grid_cells

# Function to fill characters into grid cells
def fill_characters_in_grid(page, grid_cells, text):
for i, char in enumerate(text):
if i >= len(grid_cells):  # Stop if text exceeds number of cells
break
x_start, y_start, _, _ = grid_cells[i]
page.insert_text((x_start + 2, y_start + 2), char, fontsize=12, color=(0, 0, 0))

# Process the Surname field
for page_num in range(len(doc)):
page = doc[page_num]
grid_cells = detect_grid_cells(page, "Surname")
if grid_cells:
fill_characters_in_grid(page, grid_cells, form_data["Surname"])

# Save the PDF
doc.save(output_pdf_path)
doc.close()
Что работает:
Я могу успешно идентифицировать ячейки сетки и правильно их сортировать.
Я могу раскрасьте границы ячеек сетки (используя page.draw_rect).
Что не работает:
Когда Пытаюсь вписать символы в каждую ячейку сетки, текст выравнивается неправильно или не отображается все.
Мои вопросы:
Как правильно разместить один символ в ячейке сетки с помощью PyMuPDF?
Есть ли лучший способ идентифицировать поля сетки в PDF-файлах и взаимодействовать с ними?
Есть ли в PyMuPDF ограничения на обработку такого типа размещения символов?
Будем благодарны за любую помощь или предложения!

Подробнее здесь: https://stackoverflow.com/questions/793 ... grid-fails
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»