
Подчеркивание (__________) для текстовых полей или
Блоки/ячейки сетки для ввода одного символа в блок.
Я успешно вставил текст для полей с подчеркивания, определяя их ограничивающие рамки, но мой код дает сбой при попытке записать символы в отдельные блоки сетки.
Вот что я пробовал до сих пор:
Код: Выделить всё
# JSON data
form_data = {
"Name": "John",
"Surname": "Carter",
"ID": "238094238094",
"Contact": "08348392983",
"email": "johan@jele.com",
"Address": "123 Street, City",
"City": "Pilgrims",
}
Я отсортировал ячейки слева - вправо по их координатам 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
Мобильная версия